3. 环境准备:Kubernetes集群搭建(Minikube/Kind)、安装Gatekeeper(Helm/YAML)、验证安装状态
本章是课程的基础环境搭建环节。你将完成两阶段操作:首先在本地快速拉起一个Kubernetes集群(Minikube或Kind二选一),然后通过Helm或YAML方式安装OPA Gatekeeper,最后通过一系列验证命令确认集群与Gatekeeper均处于可用状态。所有后续章节的变更门禁策略都将运行在这个环境之上。
3.1 集群搭建:Minikube vs Kind 选型对比
本地开发环境推荐使用Minikube或Kind。两者都能在单机上创建符合CNCF标准的Kubernetes集群,但在资源消耗、启动速度、网络模型和适用场景上存在差异。下表从关键维度进行对比,帮助你根据自身硬件条件做出选择。
| 对比维度 | Minikube | Kind (Kubernetes in Docker) |
|---|---|---|
| 底层技术 | 虚拟机(Hypervisor)或Docker驱动 | Docker容器作为节点 |
| 启动速度 | 较慢(约2-5分钟,依赖镜像拉取) | 较快(约30秒-2分钟) |
| 资源占用 | 较高(默认2核CPU、2GB内存) | 较低(默认共享宿主机内核) |
| 网络模型 | 独立IP,LoadBalancer支持较好 | 节点共享宿主机网络,需额外端口映射 |
| 持久化存储 | 内置CSI驱动,支持PV/PVC | 需手动配置hostPath或local卷 |
| 适用场景 | 完整功能测试、Ingress/LB验证 | CI/CD流水线、快速迭代、资源受限环境 |
3.2 使用Minikube搭建集群
以下步骤以Minikube v1.32+和Docker驱动为例。确保已安装Docker和kubectl。
- 启动集群:指定驱动、cri和资源配额。
minikube start \
--driver=docker \
--cpus=2 \
--memory=4096 \
--kubernetes-version=v1.28.3 \
--cri=containerd
- 验证集群状态:确认节点和核心组件就绪。
kubectl cluster-info
kubectl get nodes -o wide
kubectl get pods -n kube-system
- 启用必要插件(可选,用于后续Ingress测试)。
minikube addons enable ingress
minikube addons enable metrics-server
3.3 使用Kind搭建集群
Kind通过YAML配置文件定义集群拓扑。以下配置创建一个包含1个控制平面节点和2个工作节点的集群。
- 创建配置文件
kind-config.yaml:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30080
hostPort: 30080
- role: worker
- role: worker
- 创建集群:
kind create cluster --config kind-config.yaml --name gatekeeper-cluster
- 验证集群:
kubectl cluster-info --context kind-gatekeeper-cluster
kubectl get nodes
kubectl get pods -A
kind-<集群名称>。后续所有kubectl操作需指定正确的上下文,或通过 kubectl config use-context kind-gatekeeper-cluster 切换。
3.4 安装Gatekeeper:Helm vs YAML 方式
Gatekeeper的安装推荐使用Helm Chart,便于版本管理和参数定制。YAML方式适用于离线环境或需要精确控制资源清单的场景。两种方式的核心步骤对比如下:
| 安装方式 | 命令/文件 | 版本管理 | 自定义参数 | 卸载复杂度 |
|---|---|---|---|---|
| Helm | helm install gatekeeper gatekeeper/gatekeeper |
自动管理Chart版本 | 通过values.yaml或--set | 低(helm uninstall) |
| YAML | kubectl apply -f gatekeeper.yaml |
手动管理YAML版本 | 需手动编辑YAML | 中(需删除多个资源) |
3.4.1 使用Helm安装(推荐)
- 添加Gatekeeper Helm仓库:
helm repo add gatekeeper https://open-policy-agent.github.io/gatekeeper/charts
helm repo update
- 安装Gatekeeper(指定命名空间和版本):
helm install gatekeeper gatekeeper/gatekeeper \
--namespace gatekeeper-system \
--create-namespace \
--version 3.16.0 \
--set replicas=1 \
--set auditInterval=60
- 验证Helm Release状态:
helm list -n gatekeeper-system
helm status gatekeeper -n gatekeeper-system
3.4.2 使用YAML安装(备选)
- 下载最新Gatekeeper部署YAML:
curl -sL https://raw.githubusercontent.com/open-policy-agent/gatekeeper/v3.16.0/deploy/gatekeeper.yaml -o gatekeeper.yaml
- 应用YAML到集群:
kubectl apply -f gatekeeper.yaml
- 确认资源创建:
kubectl get all -n gatekeeper-system
kubectl get crd | grep gatekeeper
3.5 验证安装状态
安装完成后,必须执行以下四步验证,确保Gatekeeper的核心组件正常运行、API资源已注册、Webhook配置生效、以及审计功能可用。
- Pod状态:所有Pod处于Running状态,且就绪探针通过。
- CRD注册:至少包含
constrainttemplates、constraints、providers等核心CRD。 - Webhook配置:ValidatingWebhookConfiguration和MutatingWebhookConfiguration已创建。
- 审计端点:Gatekeeper审计Pod能够正常访问并输出审计结果。
3.5.1 验证Pod与Service
kubectl get pods -n gatekeeper-system -o wide
kubectl get svc -n gatekeeper-system
kubectl describe pod -n gatekeeper-system -l app=gatekeeper
预期输出:gatekeeper-controller-manager Pod的READY列为1/1,STATUS为Running;gatekeeper-audit Pod同样处于Running状态。
3.5.2 验证CRD与Webhook
kubectl get crd | grep gatekeeper.sh
kubectl get validatingwebhookconfiguration gatekeeper-validating-webhook-configuration -o yaml | head -20
kubectl get mutatingwebhookconfiguration gatekeeper-mutating-webhook-configuration -o yaml | head -20
核心CRD列表应包含:
assign.mutations.gatekeeper.shassignmetadata.mutations.gatekeeper.shconstrainttemplates.templates.gatekeeper.shconstraints.constraints.gatekeeper.shproviders.externaldata.gatekeeper.sh
3.5.3 验证审计功能
Gatekeeper默认每60秒执行一次集群审计。通过查看审计Pod日志确认其正常工作:
AUDIT_POD=$(kubectl get pod -n gatekeeper-system -l app=gatekeeper-audit -o jsonpath='{.items[0].metadata.name}')
kubectl logs -n gatekeeper-system $AUDIT_POD --tail=20
日志中应包含类似 audit process completed 或 violations found: 0 的信息,表明审计循环已启动。
3.6 环境准备总览图
下图展示了从宿主机到Gatekeeper完整部署的组件关系与数据流。你可以将此图作为后续章节的参考拓扑。
3.7 环境就绪检查清单
完成上述所有步骤后,请逐项核对以下清单,确保环境100%就绪:
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| 集群节点状态 | kubectl get nodes |
所有节点状态为 Ready |
| Gatekeeper命名空间 | kubectl get ns gatekeeper-system |
命名空间存在且状态 Active |
| Gatekeeper Pod | kubectl get pods -n gatekeeper-system |
controller-manager 和 audit Pod 均为 Running |
| 核心CRD | kubectl get crd | grep gatekeeper.sh |
至少包含 constrainttemplates 和 constraints |
| Webhook配置 | kubectl get validatingwebhookconfiguration |
gatekeeper-validating-webhook-configuration 存在 |
| 审计日志 | kubectl logs -n gatekeeper-system <audit-pod> |
包含 audit process completed 信息 |