Skip to content

Kubernetes 安全体系全景

安全层次

┌─────────────────────────────────────────────────────┐
│                   集群安全                            │
│  ┌─────────────────────────────────────────────────┐│
│  │              API Server 安全                     ││
│  │  认证(Authentication)                          ││
│  │  授权(Authorization / RBAC)                    ││
│  │  准入控制(Admission Control)                   ││
│  └─────────────────────────────────────────────────┘│
│  ┌─────────────────────────────────────────────────┐│
│  │              工作负载安全                         ││
│  │  Pod Security Standards                          ││
│  │  SecurityContext                                 ││
│  │  ServiceAccount                                  ││
│  └─────────────────────────────────────────────────┘│
│  ┌─────────────────────────────────────────────────┐│
│  │              网络安全                             ││
│  │  NetworkPolicy                                   ││
│  │  mTLS(Istio/Linkerd)                           ││
│  └─────────────────────────────────────────────────┘│
│  ┌─────────────────────────────────────────────────┐│
│  │              数据安全                             ││
│  │  etcd 加密                                       ││
│  │  Secret 管理(Vault/External Secrets)           ││
│  └─────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────┘

4C 安全模型

Cloud(云/基础设施)
  └── Cluster(集群)
        └── Container(容器)
              └── Code(代码)

每一层都需要独立的安全措施,内层依赖外层的安全基础。

安全加固清单

集群级别

bash
# 1. 启用 RBAC
--authorization-mode=Node,RBAC

# 2. 禁用匿名访问
--anonymous-auth=false

# 3. 启用审计日志
--audit-log-path=/var/log/audit.log
--audit-policy-file=/etc/kubernetes/audit-policy.yaml

# 4. etcd 加密
--encryption-provider-config=/etc/kubernetes/encryption-config.yaml

# 5. 启用 Pod Security Admission
--enable-admission-plugins=...,PodSecurity

# 6. 限制 API Server 访问
--bind-address=127.0.0.1  # 只监听本地(通过 LB 暴露)

节点级别

bash
# 禁用 kubelet 匿名访问
--anonymous-auth=false
--authorization-mode=Webhook

# 限制 kubelet API 访问
--read-only-port=0  # 禁用只读端口

工作负载级别

yaml
# 最小权限原则
spec:
  serviceAccountName: minimal-sa  # 使用专用 SA
  automountServiceAccountToken: false  # 不需要时禁用
  securityContext:
    runAsNonRoot: true
    runAsUser: 1000
    seccompProfile:
      type: RuntimeDefault
  containers:
  - name: app
    securityContext:
      allowPrivilegeEscalation: false
      readOnlyRootFilesystem: true
      capabilities:
        drop: ["ALL"]

审计策略

yaml
# /etc/kubernetes/audit-policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
# 记录 Secret 的读取操作
- level: Metadata
  resources:
  - group: ""
    resources: ["secrets"]
  verbs: ["get", "list", "watch"]

# 记录所有写操作
- level: RequestResponse
  verbs: ["create", "update", "patch", "delete"]

# 忽略健康检查
- level: None
  users: ["system:kube-proxy"]
  verbs: ["watch"]
  resources:
  - group: ""
    resources: ["endpoints", "services"]

# 默认记录元数据
- level: Metadata

本站内容由 褚成志 整理编写,仅供学习参考