k8s命令行手敲rdbc限制用户命名空间权限
·
K111ubernetes 的 ~/.kube/config 文件中可以包含多个:
- Clusters(集群地址)
- Users(用户凭证)
- Contexts(上下文:绑定 cluster + user + namespace)
你当前有:
- 上下文
internal(管理员) - 上下文
xsx@internalCluster(受限用户)
你想 删掉 internal,只留 xsx@internalCluster。
✅ 正确操作步骤
📌 第一步:确认当前所有上下文
kubectl config get-contexts
输出示例:
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* xsx@internalCluster internalCluster xsx ydgt-captcha
internal internalCluster user
为 xsx 添加 RBAC 权限
✅ 第一步:创建 Role(权限定义)
Yaml
编辑
# role-xsx.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: xsx-role
namespace: ydgt-captcha # 限定在该命名空间
rules:
- apiGroups: [""]
resources: ["pods", "services"]
verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
resources: ["deployments", "replicasets"]
verbs: ["get", "list", "watch"]
应用:
kubectl apply -f role-xsx.yaml
✅ 第二步:创建 RoleBinding(绑定角色到用户)
yaml
# rolebinding-xsx.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: xsx-rolebinding
namespace: ydgt-captcha
subjects:
- kind: ServiceAccount
name: xsx
namespace: ydgt-captcha
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: xsx-role
kubectl apply -f rolebinding-xsx.yaml
✅ 第三步:验证是否生效
切换到 xsx 用户上下文:
kubectl config use-context xsx@internalCluster
然后测试:
kubectl get pods
kubectl get services
kubectl get deployments
✅ 应该都能成功!
💡 常见错误排查
| 错误 | 原因 | 解决 |
|---|---|---|
cannot list resource "pods" | 没有 Role 或 RoleBinding | 创建 RBAC |
no permissions to access | Role 中未包含对应资源 | 修改 rules |
namespace not found | 上下文配置错误 | 检查 kubectl config get-contexts |
📄 完整操作流程总结
Bash
编辑
# 1. 创建 ServiceAccount(已做)
kubectl create serviceaccount xsx -n ydgt-captcha
# 2. 创建 token secret(已做)
kubectl apply -f xsx-token.yaml
# 3. 创建 Role(新增)
kubectl apply -f role-xsx.yaml
# 4. 创建 RoleBinding(新增)
kubectl apply -f rolebinding-xsx.yaml
# 5. 切换上下文
kubectl config use-context xsx@internalCluster
# 6. 测试
kubectl get pods
kubectl get deployments
📌 第二步:删除不需要的上下文
kubectl config delete-context internal
✅ 成功后,该上下文会从 ~/.kube/config 中移除。
更多推荐
所有评论(0)