没想到还能这么配置k8s权限

121 阅读1分钟

📝 CKA 1.26·第1题|Kubernetes 权限配置快速解答

场景: 令 CI/CD 管道在 app-team1 命名空间中,仅具备创建 Deployment、StatefulSet、DaemonSet 的权限。


一、题目要求

  1. 切换上下文到 k8s 集群。

  2. 创建 deployment-clusterrole ClusterRole,仅允许执行 create 动作,针对资源:

    • deployments
    • statefulsets
    • daemonsets
  3. app-team1 命名空间中创建 ServiceAccount cicd-token

  4. 通过 RoleBinding 将该 ClusterRole 限定绑定到 app-team1:cicd-token


二、核心命令示例

# 1. 切换上下文
kubectl config use-context k8s

# 2. 创建 ClusterRole(仅允许 create 指定 workload)
kubectl create clusterrole deployment-clusterrole \
  --verb=create \
  --resource=deployments,statefulsets,daemonsets

# 3. 创建 ServiceAccount
kubectl create serviceaccount cicd-token \
  -n app-team1

# 4. 创建 RoleBinding(ClusterRole → ServiceAccount)
kubectl create rolebinding cicd-token-binding \
  --clusterrole=deployment-clusterrole \
  --serviceaccount=app-team1:cicd-token \
  -n app-team1

三、关键点提示

  • ClusterRole 作用域:定义权限集合,可跨命名空间复用。
  • RoleBinding 限定范围:仅在 app-team1 生效,不影响其他命名空间。
  • Verb 与 资源粒度--verb=create + --resource=deployments,statefulsets,daemonsets(复数形式)。
  • 最小权限原则:仅授予所需操作,避免多余权限。

四、常见问题与排查

  1. 权限不生效

    • 确认使用复数资源名称:deploymentsstatefulsetsdaemonsets
    • 复查 ClusterRole 名称是否正确。
  2. RoleBinding 无法绑定

    • 检查命名空间是否一致(-n app-team1)。
    • 确保 ServiceAccount 存在。
  3. 误用 ClusterRoleBinding 导致越权:

    • 使用 RoleBinding 可局部授权,满足安全隔离。
  • 权限不生效:检查资源名拼写(需复数)
  • ServiceAccount 未注入:确认 -n app-team1--serviceaccount=app-team1:cicd-token 一致
  • 误用 ClusterRoleBinding:会导致权限跨命名空间扩散

五、参考文档