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 验证安装状态
安装完成后,依次检查以下三个维度:
- Pod 运行状态:确认所有 Pod 处于
Running且READY列为2/2(含 sidecar 容器)。 - CRD 注册情况:检查
constrainttemplates和constraints两个核心 CRD 是否已注册。 - 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 的核心组件及其交互关系:
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 来定义并应用策略。