2. 环境准备:安装 Helm、Kubernetes 集群(Minikube)、OPA Gatekeeper

在进行 Rego 策略性能基准测试之前,必须搭建一套完整且可复现的实验环境。本章将指导你依次安装 Helm(包管理工具)、Minikube(本地 Kubernetes 集群)以及 OPA Gatekeeper(策略引擎),并验证各组件之间的连通性。

2.1 环境概览与组件关系

下图展示了三个核心组件在基准测试环境中的层级关系与数据流向:Helm 负责将 Gatekeeper 及其策略模板部署到 Minikube 集群中,Gatekeeper 作为准入控制器拦截资源请求,并调用 OPA 引擎执行 Rego 策略评估。

Helm + Minikube + Gatekeeper 环境架构图 环境组件关系与数据流 Helm Chart 仓库 / 模板引擎 Minikube 本地 K8s 集群 OPA Gatekeeper 准入控制器 helm install 部署 Pod 说明:Gatekeeper 以 Pod 形式运行在 Minikube 集群中, 通过 ValidatingWebhookConfiguration 拦截资源创建/更新请求。 基准测试流程:Helm 部署 → Minikube 运行 → Gatekeeper 策略评估

2.2 安装 Helm

Helm 是 Kubernetes 的包管理工具,用于简化 Gatekeeper 及其约束模板的部署。建议使用 Helm v3.x 版本,无需 Tiller 服务端组件。

2.2.1 安装步骤(Linux / macOS)

  1. 下载官方安装脚本:curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
  2. 验证安装:helm version --short,输出应类似 v3.14.0+gc4e7b8e
  3. 添加 Gatekeeper 官方仓库:helm repo add gatekeeper https://open-policy-agent.github.io/gatekeeper/charts
  4. 更新仓库索引:helm repo update
💡 提示:如果网络受限,可提前下载 Helm 二进制文件并手动放置到 /usr/local/bin/ 目录。

2.2.2 验证 Helm 与仓库连通性

# 搜索 Gatekeeper Chart 版本
helm search repo gatekeeper/gatekeeper --versions | head -5

# 预期输出示例:
# NAME                            CHART VERSION   APP VERSION     DESCRIPTION
# gatekeeper/gatekeeper           3.16.0          3.16.0          Gatekeeper ...
# gatekeeper/gatekeeper           3.15.0          3.15.0          Gatekeeper ...

2.3 安装 Minikube 集群

Minikube 提供轻量级本地 Kubernetes 环境,适合单节点性能基准测试。推荐配置:4 vCPU、8 GB 内存、30 GB 磁盘,以模拟真实 Gatekeeper 负载。

2.3.1 安装与启动

步骤 命令 / 操作 说明
1 curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 下载 Minikube 二进制
2 sudo install minikube-linux-amd64 /usr/local/bin/minikube 安装到系统路径
3 minikube start --cpus=4 --memory=8192 --disk-size=30g 启动集群(指定资源)
4 kubectl cluster-info 验证集群状态
⚠️ 注意:如果使用 Docker 驱动,请确保 Docker 已安装并运行。启动时若资源不足,可适当降低 --cpus 和 --memory 值,但性能测试结果可能受影响。

2.3.2 验证集群就绪

# 查看节点状态
kubectl get nodes

# 预期输出:
# NAME       STATUS   ROLES           AGE   VERSION
# minikube   Ready    control-plane   2m    v1.28.3

# 查看系统 Pod 状态
kubectl get pods -n kube-system

2.4 安装 OPA Gatekeeper

Gatekeeper 作为 Kubernetes 的准入控制器,通过 Helm Chart 部署到 gatekeeper-system 命名空间。基准测试中需确保 Gatekeeper 的 审计(Audit) 和 Webhook 组件均正常运行。

2.4.1 使用 Helm 部署 Gatekeeper

# 创建命名空间
kubectl create namespace gatekeeper-system

# 使用 Helm 安装 Gatekeeper(启用审计与 Webhook)
helm install gatekeeper gatekeeper/gatekeeper \
  --namespace gatekeeper-system \
  --set auditInterval=0 \
  --set logLevel=DEBUG \
  --set replicas=1

# 等待 Pod 就绪
kubectl wait --for=condition=Ready pods --all -n gatekeeper-system --timeout=120s

2.4.2 验证 Gatekeeper 组件

组件 Pod 名称前缀 功能
Webhook gatekeeper-controller-manager 处理资源准入请求,执行 Rego 策略
Audit gatekeeper-audit 定期审计集群现有资源,标记违规
# 查看 Gatekeeper Pod 详情
kubectl get pods -n gatekeeper-system -o wide

# 预期输出(示例):
# NAME                                             READY   STATUS    RESTARTS   AGE
# gatekeeper-controller-manager-7d8c9f6b8c-xk2jf   1/1     Running   0          1m
# gatekeeper-audit-5f4b7c9d6d-abcde                1/1     Running   0          1m

2.5 环境连通性验证

完成安装后,执行以下端到端验证,确保 Helm、Minikube 和 Gatekeeper 协同工作:

  1. 部署测试约束模板:使用 Helm 安装一个简单的 K8sRequiredLabels 约束模板。
  2. 创建约束实例:要求所有命名空间必须包含 owner 标签。
  3. 触发准入检查:尝试创建一个不带 owner 标签的命名空间,观察是否被拒绝。
📋 验证命令速查:
# 1. 安装约束模板
kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/master/demo/basic/templates/k8srequiredlabels_template.yaml

# 2. 创建约束
kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/master/demo/basic/constraints/all_ns_must_have_owner.yaml

# 3. 测试违规创建(应被拒绝)
kubectl create ns test-no-owner

# 预期输出:Error from server (Forbidden): admission webhook "validation.gatekeeper.sh" denied the request

2.6 环境清单与版本记录

为便于后续基准测试结果复现,建议记录当前环境的精确版本信息:

组件 版本命令 推荐版本
Helm helm version --short v3.14+
Minikube minikube version v1.32+
Kubernetes kubectl version --short v1.28+
Gatekeeper helm list -n gatekeeper-system v3.16+
📌 建议:将上述版本信息保存至 env-info.txt 文件,与测试报告一同归档,确保基准测试的可追溯性。