这是《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 时:
- 只授予必要资源;
- 不给 cluster-admin;
- 明确 namespace;
- 审计 token 使用;
- 使用短周期凭据或投影卷。
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 安全
- 不暴露公网;
- 启用认证授权;
- 审计日志;
- TLS 证书管理;
- 禁止匿名访问;
- 限制 dashboard 权限;
- 定期审查 RBAC。
23.6 供应链安全
- 镜像扫描;
- 签名验证;
- 私有仓库凭据控制;
- CI 最小权限;
- 准入策略阻断高危配置;
- 基础镜像更新流程。
本章小结
Kubernetes 安全要分层:控制面只暴露给可信网络,RBAC 最小授权,Pod 降低权限,镜像可追溯,Secret 有审计,节点和运行时持续加固。
思考题
- Role 和 ClusterRole 有什么区别?
- 为什么 Pod 不应挂载高权限 ServiceAccount?
- privileged 容器有什么风险?
- API Server 为什么不应暴露公网?
- 如何审计 Kubernetes 权限?