如何为支持RBAC的Kubernetes集群创建多个管理员用户?
没问题,我来帮你搞定这个事儿!要给多个用户分配K8s集群的管理员权限,核心就是把用户(或者用户组)和K8s自带的集群级管理员角色绑定起来,下面是一步步的实操方法:
1. 先创建用户身份(证书+kubeconfig)
首先你得给每个管理员用户生成身份凭证——私钥、签名证书,然后配置到kubeconfig里。这里以创建用户alice为例:
# 生成用户私钥 openssl genrsa -out alice.key 2048 # 生成证书签名请求(CSR),CN是用户名,O是用户所属组(可选,后面可以用组批量绑定) openssl req -new -key alice.key -out alice.csr -subj "/CN=alice/O=cluster-admins" # 用集群CA签名证书(如果你有权限访问控制节点的CA文件) openssl x509 -req -in alice.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out alice.crt -days 365 # 将用户添加到kubeconfig kubectl config set-credentials alice --client-certificate=alice.crt --client-key=alice.key
如果不想直接操作CA文件,也可以用kubectl certificate approve来通过CSR请求,步骤差不多:先提交CSR到集群,再用命令审批即可。
2. 绑定管理员权限到用户
K8s默认提供了一个拥有全集群所有权限的ClusterRole:cluster-admin,我们只需要把用户绑定到这个角色就可以了。
创建一个ClusterRoleBinding的yaml文件(比如alice-cluster-admin.yaml):
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: alice-cluster-admin subjects: - kind: User name: alice # 这里填你的用户名 apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: cluster-admin # 绑定默认的管理员角色 apiGroup: rbac.authorization.k8s.io
然后执行:
kubectl apply -f alice-cluster-admin.yaml
3. 批量创建多个管理员用户
如果要创建多个用户,重复上面的步骤太麻烦,写个简单的shell脚本批量搞定:
#!/bin/bash # 定义要创建的管理员用户列表 ADMIN_USERS=("bob" "charlie" "diana") # 集群CA文件路径(控制节点上的路径) CA_CERT="/etc/kubernetes/pki/ca.crt" CA_KEY="/etc/kubernetes/pki/ca.key" # 用户所属组 ADMIN_GROUP="cluster-admins" for USER in "${ADMIN_USERS[@]}"; do echo "创建用户: $USER" # 生成私钥 openssl genrsa -out "${USER}.key" 2048 # 生成CSR openssl req -new -key "${USER}.key" -out "${USER}.csr" -subj "/CN=${USER}/O=${ADMIN_GROUP}" # 签名证书 openssl x509 -req -in "${USER}.csr" -CA "${CA_CERT}" -CAkey "${CA_KEY}" -CAcreateserial -out "${USER}.crt" -days 365 # 配置kubeconfig kubectl config set-credentials "${USER}" --client-certificate="${USER}.crt" --client-key="${USER}.key" # 创建ClusterRoleBinding cat <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: ${USER}-cluster-admin subjects: - kind: User name: ${USER} apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io EOF done
把脚本保存成create-admins.sh,赋予执行权限chmod +x create-admins.sh,然后在控制节点运行就行。
4. 更高效的方式:用用户组批量绑定
如果你的管理员用户都属于同一个组,比如cluster-admins,可以直接把整个组绑定到cluster-admin角色,这样后续新增用户只要加入这个组,自动获得管理员权限:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: cluster-admins-group-binding subjects: - kind: Group name: cluster-admins # 这里填你的用户组名 apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io
执行kubectl apply -f group-cluster-admin.yaml后,所有CSR里O=cluster-admins的用户都会自动拥有管理员权限,不用再逐个绑定。
验证权限
最后可以验证一下用户的权限是否生效:
# 用bob用户查看集群节点 kubectl --user=bob get nodes # 检查用户是否拥有所有权限 kubectl auth can-i --user=bob '*' '*'
如果返回yes,说明权限配置成功啦!
内容的提问来源于stack exchange,提问作者sherlock

