Docker KubernetesNotes

第 23 章:RBAC 与安全

zjc 于 2026-01-23 发布

这是《Docker 与 Kubernetes 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 Kubernetes 安全包括控制面访问、工作负载权限、网络边界、镜像供应链、Secret 和节点安全。RBAC 是权限治理的入口。

23.1 RBAC 对象

对象 说明
Role 命名空间权限
ClusterRole 集群权限
RoleBinding 绑定到命名空间主体
ClusterRoleBinding 绑定集群主体
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: developer
  namespace: shop
rules:
  - apiGroups: [""]
    resources: ["pods", "pods/log", "services"]
    verbs: ["get", "list", "watch"]

绑定:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: developer-binding
  namespace: shop
subjects:
  - kind: User
    name: alice
roleRef:
  kind: Role
  name: developer
  apiGroup: rbac.authorization.k8s.io

23.2 权限检查

kubectl auth can-i list pods -n shop
kubectl auth can-i delete deployments -n shop --as alice
kubectl get role,rolebinding -n shop

23.3 ServiceAccount

Pod 默认使用命名空间 ServiceAccount。应用访问 Kubernetes API 时:

  1. 只授予必要资源;
  2. 不给 cluster-admin;
  3. 明确 namespace;
  4. 审计 token 使用;
  5. 使用短周期凭据或投影卷。

23.4 Pod Security

避免:

securityContext:
  privileged: true

推荐:

securityContext:
  runAsNonRoot: true
  runAsUser: 1000
  allowPrivilegeEscalation: false
  readOnlyRootFilesystem: true
  capabilities:
    drop: ["ALL"]

可用 Pod Security Standards 或准入策略限制。

23.5 API Server 安全

  1. 不暴露公网;
  2. 启用认证授权;
  3. 审计日志;
  4. TLS 证书管理;
  5. 禁止匿名访问;
  6. 限制 dashboard 权限;
  7. 定期审查 RBAC。

23.6 供应链安全

  1. 镜像扫描;
  2. 签名验证;
  3. 私有仓库凭据控制;
  4. CI 最小权限;
  5. 准入策略阻断高危配置;
  6. 基础镜像更新流程。

本章小结

Kubernetes 安全要分层:控制面只暴露给可信网络,RBAC 最小授权,Pod 降低权限,镜像可追溯,Secret 有审计,节点和运行时持续加固。

思考题

  1. Role 和 ClusterRole 有什么区别?
  2. 为什么 Pod 不应挂载高权限 ServiceAccount?
  3. privileged 容器有什么风险?
  4. API Server 为什么不应暴露公网?
  5. 如何审计 Kubernetes 权限?