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 安装完成后各组件之间的交互关系:

Gatekeeper 安装组件架构图 Kubernetes API Server Webhook 控制器 gatekeeper-controller-manager 审计控制器 gatekeeper-audit Webhook Service CRD 定义存储 OPA 策略引擎 说明:API Server 将准入请求发送至 Webhook 控制器,审计控制器定期扫描集群资源,两者均依赖 OPA 引擎进行策略评估。

3.6 安装后快速自检清单

完成安装后,建议按照以下清单逐项确认:

  1. Pod 状态:所有 Pod 均为 Running 状态,READY 列为 1/1
  2. Service 端点:kubectl get endpoints -n gatekeeper-system 显示有可用端点
  3. Webhook 配置:ValidatingWebhookConfiguration 已创建且 clientConfig.service 指向正确的命名空间和服务
  4. CRD 完整性:至少包含 constrainttemplates、constraints、constraintpodstatuses 等核心 CRD
  5. 审计日志:审计 Pod 日志中无持续报错,且能正常输出审计结果
  6. 策略测试:尝试创建一个简单的 ConstraintTemplate 和 Constraint,验证是否被正确拒绝或允许
生产环境建议:安装完成后,建议立即配置 PodDisruptionBudget 和 HorizontalPodAutoscaler 以保障 Gatekeeper 的高可用性。同时,开启审计日志的持久化存储,便于后续合规审计。