4. Gatekeeper 安装与部署:使用 Helm 安装 Gatekeeper、验证安装、查看 Gatekeeper 组件

Gatekeeper 是基于 OPA 的 Kubernetes 专用准入控制器,以 Admission Webhook 形式拦截资源请求,并通过 ConstraintTemplate 和 Constraint 两个 CRD 实现策略即代码。本章使用 Helm 完成部署,并验证组件运行状态。

4.1 环境准备与 Helm 仓库配置

安装前确认集群版本 ≥ 1.20,且已安装 Helm 3。执行以下命令添加 Gatekeeper 官方 Helm 仓库:

helm repo add gatekeeper https://open-policy-agent.github.io/gatekeeper/charts
helm repo update
版本锁定建议:生产环境应指定 chart 版本,避免意外升级导致策略不兼容。例如 --version 3.16.3。

4.2 使用 Helm 安装 Gatekeeper

推荐使用 --create-namespace 自动创建命名空间,并开启关键安全参数:

helm install gatekeeper gatekeeper/gatekeeper \
  --namespace gatekeeper-system \
  --create-namespace \
  --set replicas=2 \
  --set auditInterval=60 \
  --set emitAdmissionEvents=true \
  --set emitAuditEvents=true \
  --set logLevel=INFO \
  --set controllerManager.resources.limits.cpu=500m \
  --set controllerManager.resources.limits.memory=512Mi \
  --set webhook.resources.limits.cpu=200m \
  --set webhook.resources.limits.memory=256Mi
参数 默认值 推荐值 说明
replicas 1 2 控制器副本数,生产环境至少 2 保证高可用
auditInterval 60 60 审计检查周期(秒),对存量资源做合规扫描
emitAdmissionEvents false true 准入请求事件发送到 Kubernetes Event
emitAuditEvents false true 审计结果事件发送到 Kubernetes Event
logLevel INFO INFO 日志级别,调试时可改为 DEBUG

4.3 验证安装状态

安装完成后,依次检查以下三个维度:

  1. Pod 运行状态:确认所有 Pod 处于 Running 且 READY 列为 2/2(含 sidecar 容器)。
  2. CRD 注册情况:检查 constrainttemplates 和 constraints 两个核心 CRD 是否已注册。
  3. Webhook 配置:确认 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 已创建。
# 1. 检查 Pod
kubectl get pods -n gatekeeper-system

# 2. 检查 CRD
kubectl get crd | grep gatekeeper

# 3. 检查 Webhook
kubectl get validatingwebhookconfiguration gatekeeper-validating-webhook-configuration
kubectl get mutatingwebhookconfiguration gatekeeper-mutating-webhook-configuration
预期输出示例:
gatekeeper-audit-xxx 和 gatekeeper-controller-manager-xxx 两个 Deployment 的 Pod 均应为 2/2 Running;CRD 列表应包含 constrainttemplates.gatekeeper.sh 和 constraints.gatekeeper.sh。

4.4 Gatekeeper 组件架构

下图展示 Gatekeeper 的核心组件及其交互关系:

Gatekeeper 组件架构图 Gatekeeper 核心组件架构 Kubernetes API Server Validating / Mutating Webhook Controller Manager Constraint Controller Audit Controller Data Controller etcd (CRD: ConstraintTemplate / Constraint) 组件说明 Webhook 拦截 → Controller 评估 → 结果写入 etcd CRD

4.5 查看 Gatekeeper 组件详情

使用以下命令深入查看各组件的资源定义和日志:

# 查看 Deployment 详情
kubectl describe deployment gatekeeper-controller-manager -n gatekeeper-system
kubectl describe deployment gatekeeper-audit -n gatekeeper-system

# 查看 Service 和 Endpoint
kubectl get svc -n gatekeeper-system
kubectl get endpoints -n gatekeeper-system

# 查看 Webhook 配置详情
kubectl get validatingwebhookconfiguration gatekeeper-validating-webhook-configuration -o yaml | head -80

# 查看 Controller Manager 日志
kubectl logs -n gatekeeper-system -l app=gatekeeper --tail=50
常见问题:如果 Pod 一直处于 CrashLoopBackOff,请检查 kubectl describe pod 中的 Events 字段,通常是因为 Webhook 证书未正确签发或 RBAC 权限不足。可尝试删除并重新安装:helm uninstall gatekeeper -n gatekeeper-system 后重试。

4.6 安装后快速自检清单

检查项 命令 预期结果
Pod 状态 kubectl get pods -n gatekeeper-system 所有 Pod 为 2/2 Running
CRD 注册 kubectl get crd | grep gatekeeper 至少包含 constrainttemplates 和 constraints
Webhook 配置 kubectl get validatingwebhookconfiguration 存在 gatekeeper-validating-webhook-configuration
Service 暴露 kubectl get svc -n gatekeeper-system 存在 gatekeeper-webhook-service,ClusterIP 正常
审计日志 kubectl logs -n gatekeeper-system deployment/gatekeeper-audit --tail=10 无 ERROR 或 FATAL 级别日志

完成以上步骤后,Gatekeeper 已成功部署并运行。下一阶段将创建 ConstraintTemplate 和 Constraint 来定义并应用策略。