2. 环境准备:安装 Helm、Kubernetes 集群(Minikube)、OPA Gatekeeper
在进行 Rego 策略性能基准测试之前,必须搭建一套完整且可复现的实验环境。本章将指导你依次安装 Helm(包管理工具)、Minikube(本地 Kubernetes 集群)以及 OPA Gatekeeper(策略引擎),并验证各组件之间的连通性。
2.1 环境概览与组件关系
下图展示了三个核心组件在基准测试环境中的层级关系与数据流向:Helm 负责将 Gatekeeper 及其策略模板部署到 Minikube 集群中,Gatekeeper 作为准入控制器拦截资源请求,并调用 OPA 引擎执行 Rego 策略评估。
2.2 安装 Helm
Helm 是 Kubernetes 的包管理工具,用于简化 Gatekeeper 及其约束模板的部署。建议使用 Helm v3.x 版本,无需 Tiller 服务端组件。
2.2.1 安装步骤(Linux / macOS)
- 下载官方安装脚本:
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash - 验证安装:
helm version --short,输出应类似v3.14.0+gc4e7b8e - 添加 Gatekeeper 官方仓库:
helm repo add gatekeeper https://open-policy-agent.github.io/gatekeeper/charts - 更新仓库索引:
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 协同工作:
- 部署测试约束模板:使用 Helm 安装一个简单的
K8sRequiredLabels约束模板。 - 创建约束实例:要求所有命名空间必须包含
owner标签。 - 触发准入检查:尝试创建一个不带
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 文件,与测试报告一同归档,确保基准测试的可追溯性。