预约咨询 提交工单

使用OPA Gatekeeper和Pod安全标准强化Kubernetes Pod安全

学习如何使用OPA Gatekeeper强制执行Pod安全标准(PSS)来加固Kubernetes集群,防范常见漏洞。本指南涵盖场景、诊断、实施、回滚和验证。

使用OPA Gatekeeper和Pod安全标准强化Kubernetes Pod安全
Security 6min 13 浏览 2026-06-21
KubernetesSREPod安全OPA Gatekeeper

场景

在一个多租户Kubernetes集群中,开发团队部署工作负载,但安全团队需要强制执行Pod安全策略,同时不影响现有应用。许多Pod以root身份运行,使用特权容器或危险功能,安全审计发现大量漏洞。

症状

  • 安全审计结果:大量Pod以root运行,拥有特权或危险capability。
  • 开发者拒绝手动审查,安全策略(PodSecurityPolicy)已被弃用,缺乏自动化执行。

诊断

使用kubectl检查Pod的安全上下文:

kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.namespace} {.metadata.name} {.spec.containers[*].securityContext.privileged}{.spec.containers[*].securityContext.runAsUser}{.spec.containers[*].securityContext.capabilities.add}{"\n"}{end}' | head -20

检查特权Pod:

kubectl get pods --all-namespaces -o json | jq '.items[] | select(.spec.containers[].securityContext.privileged == true) | {namespace: .metadata.namespace, name: .metadata.name}'

识别需要加固的命名空间。

命令(实施)

  1. 安装OPA Gatekeeper:
kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/master/deploy/gatekeeper.yaml
  1. 部署Pod安全标准约束模板(Baseline和Restricted):
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
  name: k8spspbaseline
spec:
  crd:
    spec:
      names:
        kind: K8sPSPBaseline
  targets:
    - target: admission.k8s.gatekeeper.sh
      rego: |
        package k8spspbaseline
        violation[{"msg": msg}] {
          # 实现Baseline约束逻辑
          msg := sprintf("Pod %v in namespace %v violates Baseline Pod Security Standard", [input.review.object.metadata.name, input.review.object.metadata.namespace])
        }
  1. 应用约束(审计模式):
kubectl apply -f constraint.yaml --dry-run=server
  1. 对特定命名空间强制执行:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPBaseline
metadata:
  name: pod-security-baseline
spec:
  match:
    namespaces: ["prod", "staging"]
  enforcementAction: dryrun

随后改为warndeny

风险控制

  • 先使用dryrun模式收集违反情况。
  • 排除运行DaemonSet等关键组件的命名空间。
  • 使用标签security.opsglobal.io/exempt=true跳过检查。
  • 在非生产环境全面测试。

回滚

删除约束模板和实例,或回退到审计模式:

kubectl delete constrainttemplate k8spspbaseline
kubectl delete constraint pod-security-baseline

验证

查看Gatekeeper的违反状态:

kubectl get constrainttemplates
kubectl get K8sPSPBaseline -o yaml

创建测试Pod验证:

kubectl run nginx --image=nginx --restart=Never --dry-run=server -o yaml | kubectl apply -f -

若违反,应被拒绝或警告。

何时提交OpsGlobal工单

  • 需要跨多个集群一致实施时。
  • 自定义约束模板开发。
  • 性能调优(Gatekeeper延迟)。
  • 处理大量违反且需要紧急修复的情况。

适用场景

适合正在处理 Security、Kubernetes, SRE, Pod安全, OPA Gatekeeper 相关问题的团队,用于快速建立排查路径和交付标准。

问题背景

学习如何使用OPA Gatekeeper强制执行Pod安全标准(PSS)来加固Kubernetes集群,防范常见漏洞。本指南涵盖场景、诊断、实施、回滚和验证。

排查步骤

先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。

命令示例

示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。

风险说明

生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。

回滚方案

保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。

交付清单

问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。

!

遇到类似技术问题?

如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。

工单 WhatsApp 联系 咨询