正在加载,请稍候…

Kubernetes 安全加固:2026 年生产级指南

学习如何使用 Pod 安全标准、RBAC、网络策略、密钥管理以及 Falco 和 OPA Gatekeeper 运行时安全来加固生产级 Kubernetes 集

Kubernetes 安全加固:2026 年生产级指南

Kubernetes 安全加固:2026 年生产级指南

在生产环境中运行 Kubernetes 意味着操作有史以来最复杂的分布式系统之一。默认配置针对快速入门进行了优化,而非安全性。本指南涵盖了每个生产集群所需的关键安全控制措施。

了解 Kubernetes 攻击面

在加固之前,了解您要保护的内容:

  • API Server:控制平面的单一入口点——一旦被攻破,一切尽失
  • etcd:存储包括密钥在内的所有集群状态——必须启用静态加密
  • Kubelet:节点级代理,可能被利用进行容器逃逸
  • 容器运行时:工作负载执行前的最后一层

真实世界的入侵几乎总是遵循相同的模式:暴露的服务 → 容器逃逸 → 横向移动到 API Server → 集群接管。

Kubernetes 安全加固:2026 年生产级指南 插图

Pod 安全标准(PSS)

PSP 在 1.21 版本中被弃用,并在 1.25 版本中被移除。替代方案是 Pod 安全标准与 Pod 安全准入控制器:

apiVersion: v1
kind: Namespace
metadata:
  name: production
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/enforce-version: v1.28
    pod-security.kubernetes.io/warn: restricted

restricted 配置文件强制要求:

  • runAsNonRoot: true
  • 只读根文件系统
  • 删除所有 capabilities
  • 禁止特权提升
  • 需要 Seccomp 配置文件

合规的 Pod 规范:

spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 10001
    seccompProfile:
      type: RuntimeDefault
  containers:
  - name: app
    securityContext:
      allowPrivilegeEscalation: false
      readOnlyRootFilesystem: true
      capabilities:
        drop: [ALL]

RBAC:最小权限原则

kubectl get clusterrolebindings -o json | \
  jq '.items[] | select(.roleRef.name == "cluster-admin") |
      {name: .metadata.name, subjects: .subjects}'

创建最小权限的服务账户:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: app-sa
  namespace: production
automountServiceAccountToken: false
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: app-role
rules:
- apiGroups: [""]
  resources: ["configmaps"]
  resourceNames: ["app-config"]
  verbs: ["get"]

Kubernetes 安全加固:2026 年生产级指南 插图

网络策略:零信任网络

# 默认拒绝所有流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
  namespace: production
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
---
kind: NetworkPolicy
spec:
  podSelector:
    matchLabels:
      app: backend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - port: 8080

External Secrets Operator

切勿直接将敏感数据存储在 Kubernetes Secrets 中。使用 External Secrets Operator 与 AWS Secrets Manager 或 Vault:

apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: database-credentials
spec:
  refreshInterval: 1h
  secretStoreRef:
    name: aws-secrets
    kind: SecretStore
  target:
    name: db-credentials
  data:
  - secretKey: DB_PASSWORD
    remoteRef:
      key: prod/database/credentials
      property: password

Kubernetes 安全加固:2026 年生产级指南 插图

运行时安全:Falco

Falco 使用 eBPF 探针检测运行时异常行为:

- rule: Shell in Container
  desc: A shell was spawned in a container
  condition: >
    container and spawned_process and shell_procs and
    not proc.pname in (shell_binaries)
  output: >
    Shell spawned (user=%user.name container=%container.id
    image=%container.image.repository shell=%proc.name)
  priority: WARNING

OPA Gatekeeper 策略执行

apiVersion: templates.gatekeeper.sh/v1
kind: ConstraintTemplate
metadata:
  name: requirelabels
spec:
  targets:
  - target: admission.k8s.gatekeeper.sh
    rego: |
      package requirelabels
      violation[{"msg": msg}] {
        provided := {label | input.review.object.metadata.labels[label]}
        required := {label | label := input.parameters.labels[_]}
        missing := required - provided
        count(missing) > 0
        msg := sprintf("Missing required labels: %v", [missing])
      }

安全检查清单

  • etcd 使用 AES-GCM 静态加密
  • API Server 禁用匿名认证
  • 网络策略默认拒绝
  • 强制 Pod 安全标准(restricted 配置文件)
  • 所有密钥使用 External Secrets Operator
  • 部署 Falco 进行运行时检测
  • OPA Gatekeeper 进行策略执行
  • 审计日志发送至 SIEM
  • 定期 RBAC 审计
  • CI/CD 中的镜像扫描(Trivy、Snyk)

Kubernetes 安全需要持续监控、定期审计,并关注影响集群组件的 CVE。