gpt4 book ai didi

azure - 创建具有受限权限的 kubeconfig

转载 作者:行者123 更新时间:2023-12-02 11:53:01 25 4
gpt4 key购买 nike

我需要创建一个具有受限访问权限的 kubeconfig,我希望能够提供在特定 namespace 中更新 configmap 的权限,如何创建具有以下权限的这样的 kubeconfig

  1. for specefic namespace (myns)
  2. update only configmap (mycm)

有没有简单的方法来创建它?

这里棘手的部分是,我需要某个程序能够访问集群 X 并仅修改此 comfigMap,在不提供完整的 kubeconfig 文件的情况下,我将如何从外部进程执行此操作出于安全原因出现问题

明确地说,我拥有集群,我只是想授予某些程序受限权限

最佳答案

这并不简单。但还是有可能的。

如果命名空间 myns 不存在,则创建它。

$ kubectl create ns myns
namespace/myns created

在 myns 命名空间中创建服务帐户 cm-user。它还会创建一个 secret token 。

$ 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

cm-user-token-kv5j5 secret 中获取 token 和 ca.crt。

$ kubectl get secrets cm-user-token-kv5j5 -n myns -oyaml

Base64 解码 cm-user-token-kv5j5 中的 token 值。

现在使用解码后的 token 创建一个用户。

$ kubectl config set-credentials cm-user --token=<decoded token value>
User "cm-user" set.

现在生成一个 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>

现在为 sa cm-user 创建角色和角色绑定(bind)。

---
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

我们完成了。现在使用此 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"

关于azure - 创建具有受限权限的 kubeconfig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62301039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com