2. 环境准备:Kubernetes集群搭建与OPA Gatekeeper安装
本章将搭建完整的实验环境,包括Kubernetes集群、kubectl命令行工具以及OPA Gatekeeper策略引擎。环境是后续所有验证操作的基础,请按步骤依次完成。
2.1 环境概览与组件清单
实验环境采用轻量级Kubernetes发行版,在单节点上模拟完整集群功能。下表列出核心组件及其用途:
| 组件 | 版本建议 | 用途说明 |
|---|---|---|
| Kind | v0.20+ | 基于Docker的Kubernetes集群,快速创建/销毁 |
| kubectl | v1.28+ | Kubernetes命令行管理工具 |
| OPA Gatekeeper | v3.14+ | Kubernetes准入控制器,执行Rego策略 |
| Docker | 24.0+ | 容器运行时,Kind依赖Docker运行节点 |
选择Kind的原因:相比Minikube,Kind启动更快、资源占用更低,且原生支持多节点集群模拟,适合CI/CD流水线中的策略验证场景。
2.2 安装Docker与Kind
Kind将Kubernetes节点运行在Docker容器中,因此需要先安装Docker。以下为Linux环境下的安装步骤:
- 安装Docker(如已安装可跳过)
# 更新包索引并安装依赖
sudo apt-get update
sudo apt-get install -y ca-certificates curl
# 添加Docker官方GPG密钥
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 添加仓库并安装Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# 将当前用户加入docker组(避免每次sudo)
sudo usermod -aG docker $USER
newgrp docker
- 安装Kind
# 下载Kind二进制文件
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
# 验证安装
kind version
2.3 创建Kubernetes集群
使用Kind创建集群时,建议通过配置文件指定API版本和端口映射,以便后续Gatekeeper的Webhook能够正常通信。
# 创建集群配置文件 kind-config.yaml
cat <<EOF > kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 443
hostPort: 443
protocol: TCP
EOF
# 使用配置文件创建集群
kind create cluster --config kind-config.yaml --name gatekeeper-lab
# 验证集群状态
kubectl cluster-info --context kind-gatekeeper-lab
kubectl get nodes
验证输出示例:当看到
gatekeeper-lab-control-plane 节点状态为 Ready,说明集群创建成功。
2.4 配置kubectl
Kind创建集群后会自动将kubeconfig写入 ~/.kube/config。如果使用多个集群上下文,需要手动切换:
# 查看当前上下文
kubectl config current-context
# 切换到实验集群上下文
kubectl config use-context kind-gatekeeper-lab
# 验证集群访问
kubectl get pods -A
如果kubeconfig未自动生成,可通过以下命令手动获取:
kind get kubeconfig --name gatekeeper-lab > ~/.kube/config
2.5 安装OPA Gatekeeper
Gatekeeper以Helm Chart或YAML清单方式安装。本课程采用YAML方式,便于理解组件结构。
# 部署Gatekeeper(使用官方最新稳定版)
kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/v3.14.0/deploy/gatekeeper.yaml
# 等待所有Pod就绪
kubectl wait --for=condition=Ready pods --all -n gatekeeper-system --timeout=120s
# 验证Gatekeeper组件
kubectl get pods -n gatekeeper-system
kubectl get crd | grep gatekeeper
安装完成后,gatekeeper-system命名空间下应包含以下Pod:
| Pod名称 | 副本数 | 功能 |
|---|---|---|
| gatekeeper-controller-manager | 1 | 策略控制器,处理准入请求 |
| gatekeeper-audit | 1 | 定期审计已有资源,标记违反策略的对象 |
2.6 验证Gatekeeper准入控制状态
Gatekeeper通过ValidatingWebhookConfiguration拦截资源创建/更新请求。验证Webhook是否注册成功:
# 查看Webhook配置
kubectl get validatingwebhookconfiguration gatekeeper-validating-webhook-configuration -o yaml | head -30
输出中应包含 rules 字段,显示Gatekeeper拦截的资源操作(如CREATE、UPDATE)。
常见问题:如果Gatekeeper Pod启动失败,检查集群是否启用了PodSecurityPolicy或网络策略限制了Gatekeeper组件的通信。可临时关闭安全策略进行排查。
2.7 环境架构总览
下图展示了实验环境的整体架构,包括组件间的调用关系:
2.8 环境验证清单
完成上述步骤后,执行以下命令确认环境就绪:
# 1. 集群节点状态
kubectl get nodes
# 2. Gatekeeper命名空间Pod状态
kubectl get pods -n gatekeeper-system
# 3. 自定义资源定义(CRD)是否注册
kubectl get crd | grep -E "constrainttemplate|constraint"
# 4. Webhook配置是否生效
kubectl get validatingwebhookconfiguration | grep gatekeeper