3. 安装 Gatekeeper:使用 Helm 安装、使用 YAML 安装、验证安装状态
Gatekeeper 作为 Kubernetes 的准入控制器,其安装方式主要分为两种:Helm Chart 安装(推荐用于生产环境)和 YAML 清单安装(适用于离线环境或快速验证)。本章将详细演示这两种安装方法,并指导你完成安装后的状态验证。
3.1 安装方式对比
| 特性 | Helm 安装 | YAML 安装 |
|---|---|---|
| 版本管理 | 支持版本回滚与升级 | 需手动管理版本 |
| 参数定制 | 通过 values.yaml 灵活配置 | 需直接修改 YAML 文件 |
| 离线部署 | 需提前拉取 Chart 包 | 支持单文件离线部署 |
| 推荐场景 | 生产环境、CI/CD 集成 | 快速测试、受限网络环境 |
3.2 使用 Helm 安装 Gatekeeper
Helm 是 Kubernetes 的包管理工具,使用 Helm 安装 Gatekeeper 可以简化版本控制和配置管理。
3.2.1 前置条件
- 已安装 Helm v3 或更高版本
- 集群已配置 kubeconfig 且具有 cluster-admin 权限
- Kubernetes 集群版本 ≥ 1.19
3.2.2 添加 Helm 仓库并安装
# 添加 Gatekeeper Helm 仓库
helm repo add gatekeeper https://open-policy-agent.github.io/gatekeeper/charts
# 更新仓库索引
helm repo update
# 创建命名空间(推荐使用 gatekeeper-system)
kubectl create namespace gatekeeper-system
# 使用 Helm 安装 Gatekeeper
helm install gatekeeper/gatekeeper \
--name-template gatekeeper \
--namespace gatekeeper-system \
--set replicas=2 \
--set auditInterval=60 \
--set logLevel=INFO
参数说明:
--set replicas=2:设置 Webhook 副本数为 2,提高可用性。--set auditInterval=60:设置审计间隔为 60 秒。--set logLevel=INFO:设置日志级别为 INFO,便于排查问题。
3.2.3 使用自定义 values.yaml 安装
对于生产环境,建议将配置写入 values.yaml 文件进行管理:
# values.yaml
replicas: 3
auditInterval: 120
logLevel: INFO
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 100m
memory: 256Mi
webhook:
failurePolicy: Fail
timeoutSeconds: 5
# 使用 values.yaml 安装
helm install gatekeeper gatekeeper/gatekeeper \
--namespace gatekeeper-system \
--values values.yaml
3.3 使用 YAML 清单安装 Gatekeeper
当 Helm 不可用或需要离线部署时,可以直接使用 Gatekeeper 官方提供的 YAML 清单文件进行安装。
3.3.1 下载并应用 YAML 清单
# 下载最新稳定版 YAML 清单
wget https://raw.githubusercontent.com/open-policy-agent/gatekeeper/master/deploy/gatekeeper.yaml
# 创建命名空间
kubectl create namespace gatekeeper-system
# 应用 YAML 清单
kubectl apply -f gatekeeper.yaml
注意:YAML 清单安装方式不会自动处理版本升级和配置变更。如需修改配置,必须直接编辑 YAML 文件后重新 apply。建议在离线环境中提前下载好对应版本的 YAML 文件。
3.3.2 验证 YAML 安装的资源清单
YAML 清单会创建以下核心资源:
| 资源类型 | 资源名称 | 作用 |
|---|---|---|
| Namespace | gatekeeper-system | Gatekeeper 组件运行命名空间 |
| Deployment | gatekeeper-controller-manager | Webhook 控制器,处理准入请求 |
| Deployment | gatekeeper-audit | 审计控制器,定期检查集群资源 |
| Service | gatekeeper-webhook-service | 暴露 Webhook 端点 |
| ValidatingWebhookConfiguration | gatekeeper-validating-webhook-configuration | 注册准入 Webhook |
| CRD | constrainttemplates, constraints 等 | 定义策略模板和约束 |
3.4 验证安装状态
安装完成后,需要通过多个维度验证 Gatekeeper 是否正常运行。
3.4.1 验证 Pod 运行状态
# 查看 Gatekeeper 命名空间下的所有 Pod
kubectl get pods -n gatekeeper-system
# 预期输出示例:
# NAME READY STATUS RESTARTS AGE
# gatekeeper-controller-manager-6b8c9f7d4c-2x7k9 1/1 Running 0 2m
# gatekeeper-controller-manager-6b8c9f7d4c-9j3m5 1/1 Running 0 2m
# gatekeeper-audit-7d9f8c6b5f-4k2j1 1/1 Running 0 2m
3.4.2 验证 Webhook 注册状态
# 查看 ValidatingWebhookConfiguration
kubectl get validatingwebhookconfiguration gatekeeper-validating-webhook-configuration
# 查看 MutatingWebhookConfiguration(如果启用了突变)
kubectl get mutatingwebhookconfiguration gatekeeper-mutating-webhook-configuration
3.4.3 验证 CRD 安装状态
# 查看 Gatekeeper 相关的 CRD
kubectl get crd | grep gatekeeper
# 预期输出示例:
# assign.mutations.gatekeeper.sh 2024-01-15
# assignmetadata.mutations.gatekeeper.sh 2024-01-15
# constraintpodstatuses.status.gatekeeper.sh 2024-01-15
# constrainttemplatepodstatuses.status.gatekeeper.sh 2024-01-15
# constrainttemplates.templates.gatekeeper.sh 2024-01-15
3.4.4 验证审计功能
# 查看审计日志(最近 10 条)
kubectl logs -n gatekeeper-system -l app=gatekeeper-audit --tail=10
# 查看审计状态
kubectl get constraintpodstatuses -n gatekeeper-system
快速验证脚本:你可以使用以下命令一次性检查所有关键组件状态:
kubectl get pods,svc,deploy,validatingwebhookconfiguration,crd -n gatekeeper-system | grep gatekeeper
3.5 Gatekeeper 安装架构图
下图展示了 Gatekeeper 安装完成后各组件之间的交互关系:
3.6 安装后快速自检清单
完成安装后,建议按照以下清单逐项确认:
- Pod 状态:所有 Pod 均为 Running 状态,READY 列为 1/1
- Service 端点:
kubectl get endpoints -n gatekeeper-system显示有可用端点 - Webhook 配置:ValidatingWebhookConfiguration 已创建且
clientConfig.service指向正确的命名空间和服务 - CRD 完整性:至少包含 constrainttemplates、constraints、constraintpodstatuses 等核心 CRD
- 审计日志:审计 Pod 日志中无持续报错,且能正常输出审计结果
- 策略测试:尝试创建一个简单的 ConstraintTemplate 和 Constraint,验证是否被正确拒绝或允许
生产环境建议:安装完成后,建议立即配置
PodDisruptionBudget 和 HorizontalPodAutoscaler 以保障 Gatekeeper 的高可用性。同时,开启审计日志的持久化存储,便于后续合规审计。