4. 环境搭建:安装 Kyverno(Helm/YAML 方式)、验证安装、安装 ArgoCD 作为 GitOps 工具、配置 Git 仓库
本章是课程落地的第一步,目标是在一个可用的 Kubernetes 集群上完成 Kyverno 与 ArgoCD 的部署,并建立与 Git 仓库的信任连接。我们将提供 Helm 与 YAML 两种安装路径,并给出验证清单,确保环境符合后续策略开发与 GitOps 流水线的要求。
前置条件:Kubernetes 集群版本 ≥ 1.24,kubectl 已配置集群上下文,Helm 3.8+ 已安装,具备集群管理员权限。
4.1 安装 Kyverno
Kyverno 作为动态准入控制器,推荐使用 Helm Chart 进行安装,便于版本管理与升级。以下同时给出 YAML 直接安装方式,供离线或受限环境使用。
4.1.1 方式一:Helm 安装(推荐)
# 添加 Kyverno Helm 仓库
helm repo add kyverno https://kyverno.github.io/kyverno/
helm repo update
# 创建命名空间并安装
kubectl create namespace kyverno
helm install kyverno kyverno/kyverno \
--namespace kyverno \
--version v3.2.6 \
--set admissionController.replicas=2 \
--set backgroundController.replicas=1 \
--set cleanupController.replicas=1 \
--set reportsController.replicas=1
4.1.2 方式二:YAML 直接安装
# 下载最新 release 的 YAML 清单
kubectl create namespace kyverno
kubectl apply -f https://github.com/kyverno/kyverno/releases/download/v3.2.6/install.yaml
注意:YAML 方式默认使用单副本,生产环境建议通过修改 Deployment 的 replicas 字段实现高可用。Helm 方式可在一行命令中指定副本数,更便于 GitOps 管理。
4.2 验证 Kyverno 安装
安装完成后,执行以下检查项确认组件正常运行:
| 检查项 | 命令 | 预期结果 |
|---|---|---|
| Pod 状态 | kubectl get pods -n kyverno |
所有 Pod 处于 Running 状态,Ready 列为 1/1 或 2/2 |
| Webhook 注册 | kubectl get validatingwebhookconfigurations |
存在 kyverno-resource-validating-webhook-cfg 等条目 |
| API 可用性 | kubectl api-resources | grep kyverno |
显示 clusterpolicies.kyverno.io、policies.kyverno.io 等 CRD |
| 策略测试 | kubectl apply -f https://kyverno.io/samples/require-labels.yaml |
策略创建成功,无报错 |
快速验证策略生效:
# 创建一个不带 app.kubernetes.io/name 标签的 Pod
kubectl run test-pod --image=nginx
# 预期输出:Error from server: admission webhook "validate.kyverno.svc" denied the request
验证通过标志:Webhook 拒绝不符合策略的请求,说明 Kyverno 已成功拦截并评估资源。
4.3 安装 ArgoCD 作为 GitOps 工具
ArgoCD 负责从 Git 仓库同步应用状态,与 Kyverno 形成“策略即代码 + 声明式部署”的闭环。以下使用官方 Helm Chart 安装。
# 添加 ArgoCD Helm 仓库
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
# 创建命名空间并安装
kubectl create namespace argocd
helm install argocd argo/argo-cd \
--namespace argocd \
--version 7.7.0 \
--set server.service.type=LoadBalancer \
--set configs.params."server\.insecure"=true
安装后获取初始管理员密码:
kubectl get secret argocd-initial-admin-secret \
-n argocd -o jsonpath="{.data.password}" | base64 -d
通过 kubectl port-forward svc/argocd-server -n argocd 8080:443 在本地访问 UI,使用 admin 及上述密码登录。
4.4 配置 Git 仓库
ArgoCD 需要连接一个 Git 仓库来读取应用清单与策略文件。以下演示通过 ArgoCD CLI 添加仓库,并配置 SSH 密钥认证。
4.4.1 安装 ArgoCD CLI
# macOS
brew install argocd
# Linux
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
chmod +x /usr/local/bin/argocd
4.4.2 登录 ArgoCD 并添加仓库
# 登录(使用上一步获取的密码)
argocd login localhost:8080 --insecure
# 添加 Git 仓库(以 GitHub 为例)
argocd repo add git@github.com:your-org/gitops-demo.git \
--ssh-private-key-path ~/.ssh/id_rsa \
--name gitops-demo
4.4.3 验证仓库连接
argocd repo list
# 输出应显示仓库 URL、连接状态为 Successful,以及 Scoped Repos 等信息
最佳实践:建议为 ArgoCD 创建专用的部署密钥(Deploy Key),仅授予仓库的读取权限。避免使用个人 SSH 密钥,降低凭证泄露风险。
4.5 环境拓扑总览
下图展示了本章搭建完成后的整体组件关系与数据流:
4.6 安装后检查清单
完成上述步骤后,使用以下清单确认环境就绪:
- Kyverno:所有 Pod 运行正常,Webhook 配置已注册,CRD 可用,策略可正常创建与执行。
- ArgoCD:Server/Repo Server/Application Controller Pod 运行正常,UI 可登录,CLI 可连接。
- Git 仓库:仓库已添加至 ArgoCD,连接状态为
Successful,SSH 密钥权限正确。 - 端到端验证:通过 ArgoCD 创建一个测试 Application,确认资源能正常同步到集群,且 Kyverno 策略能拦截不合规资源。
环境就绪标志:当你能在 ArgoCD UI 中看到应用状态为 Synced 且 Healthy,同时尝试创建违反策略的资源时收到 Webhook 拒绝错误,说明 Kyverno + ArgoCD 的 GitOps 基础环境已完全就绪。