Nin*_*a S 1 azure google-cloud-platform kubernetes
我需要创建一个具有受限访问权限的 kubeconfig,我希望能够提供在特定名称空间中更新 configmap 的权限,如何使用以下权限创建这样的 kubeconfig
- 对于特定命名空间 (myns)
- 仅更新配置映射 (mycm)
有没有简单的方法来创建它?
这里棘手的部分是我需要某个程序能够访问集群 X 并仅修改此 comfigMap,我如何从外部进程执行此操作而不提供完整的 kubeconfig 文件,这可能会因安全原因而出现问题
为了明确起见,我拥有集群,我只想授予某些程序受限权限
这并不简单。但还是有可能的。
创建命名空间 myns(如果不存在)。
$ kubectl create ns myns
namespace/myns created
Run Code Online (Sandbox Code Playgroud)
在 myns 命名空间中创建服务帐户 cm-user。它还会创建一个秘密令牌。
$ kubectl create sa cm-user -n myns
serviceaccount/cm-user created
$ kubectl get sa cm-user -n myns
NAME SECRETS AGE
cm-user 1 18s
$ kubectl get secrets -n myns
NAME TYPE DATA AGE
cm-user-token-kv5j5 kubernetes.io/service-account-token 3 63s
default-token-m7j9v kubernetes.io/service-account-token 3 96s
Run Code Online (Sandbox Code Playgroud)
从 Secret 中获取 token 和 ca.crt cm-user-token-kv5j5。
$ kubectl get secrets cm-user-token-kv5j5 -n myns -oyaml
Run Code Online (Sandbox Code Playgroud)
Base64 解码来自 的令牌值cm-user-token-kv5j5。
现在使用解码后的令牌创建一个用户。
$ kubectl config set-credentials cm-user --token=<decoded token value>
User "cm-user" set.
Run Code Online (Sandbox Code Playgroud)
现在生成一个 kubeconfig 文件 kubeconfig-cm。
apiVersion: v1
kind: Config
clusters:
- cluster:
certificate-authority-data: <ca.crt value from cm-user-token-kv5j5 secret>
server: <kubernetes server>
name: <cluster>
contexts:
- context:
cluster:<cluster>
namespace: myns
user: cm-user
name: cm-user
current-context: cm-user
users:
- name: cm-user
user:
token: <decoded token>
Run Code Online (Sandbox Code Playgroud)
现在为 sa cm-user 创建角色和角色绑定。
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: myns
name: cm-user-role
rules:
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["update", "get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: cm-user-rb
namespace: myns
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: cm-user-role
subjects:
- namespace: myns
kind: ServiceAccount
name: cm-user
Run Code Online (Sandbox Code Playgroud)
我们完了。现在使用此 kubeconfig 文件,您可以更新 mycm configmap。它没有任何其他特权。
$ kubectl get cm -n myns --kubeconfig kubeconfig-cm
NAME DATA AGE
mycm 0 8s
$ kubectl delete cm mycm -n myns --kubeconfig kubeconfig-cm
Error from server (Forbidden): configmaps "mycm" is forbidden: User "system:serviceaccount:myns:cm-user" cannot delete resource "configmaps" in API group "" in the namespace "myns"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3115 次 |
| 最近记录: |