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 环境拓扑总览

下图展示了本章搭建完成后的整体组件关系与数据流:

Kyverno + ArgoCD 环境拓扑 环境搭建完成后的组件拓扑 Git 仓库 应用清单 + 策略文件 ArgoCD GitOps 持续同步 Kubernetes 集群 资源运行环境 Kyverno 策略引擎 / 准入控制 拉取清单 同步部署 准入请求 允许/拒绝 数据流说明 1. ArgoCD 从 Git 仓库拉取应用清单与 Kyverno 策略文件 2. ArgoCD 将资源应用到 Kubernetes 集群,触发 Kyverno 准入 Webhook 3. Kyverno 根据策略评估资源,允许合规资源创建,拒绝不合规资源

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 基础环境已完全就绪。