4、环境准备:安装 Argo CD(Kubernetes 集群、Helm/Manifest 方式)、配置 Ingress 与 TLS
本章是实战课程的基石。在调用 Argo CD 接口之前,必须拥有一个可访问的 Argo CD 实例。我们将从零开始,完成 Kubernetes 集群准备、Argo CD 安装(提供 Helm 与 Manifest 两种方式),并配置 Ingress 与 TLS 证书,确保 API 端点安全可达。
4.1 前置条件与集群准备
安装 Argo CD 需要以下环境就绪:
| 组件 | 版本要求 | 说明 |
|---|---|---|
| Kubernetes 集群 | v1.23+ | 建议使用 K3s、Minikube 或云托管集群 |
| kubectl | v1.23+ | 与集群版本偏差不超过 ±1 |
| Helm(可选) | v3.8+ | 仅 Helm 安装方式需要 |
| Ingress Controller | 任意 | 推荐 nginx-ingress 或 traefik |
| 域名与 DNS | — | 用于 Ingress 访问,如 argocd.example.com |
提示: 若使用 Minikube,请先执行
minikube start --cpus=4 --memory=4096 确保资源充足。K3s 用户可直接使用内置的 traefik Ingress Controller。
4.2 安装 Argo CD:两种方式对比
我们提供两种主流安装方式,生产环境推荐 Helm 方式,便于参数化管理。
| 对比维度 | Helm 方式 | Manifest 方式 |
|---|---|---|
| 安装复杂度 | 中等(需了解 values.yaml) | 低(直接 apply) |
| 自定义能力 | 高(参数化覆盖) | 低(需手动修改 YAML) |
| 升级维护 | 简单(helm upgrade) | 需手动替换资源 |
| 适用场景 | 生产、多环境 | 快速验证、Demo |
4.2.1 方式一:Helm 安装(推荐)
添加 Helm 仓库并安装至 argocd 命名空间:
# 添加 Argo CD Helm 仓库
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
# 创建命名空间
kubectl create namespace argocd
# 使用自定义 values 安装
helm install argocd argo/argo-cd \
--namespace argocd \
--values argocd-values.yaml
以下是一个最小化 argocd-values.yaml 示例,包含 Ingress 与 TLS 配置:
# argocd-values.yaml
global:
domain: argocd.example.com
configs:
params:
server.insecure: true
server:
ingress:
enabled: true
ingressClassName: nginx
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
hosts:
- argocd.example.com
tls:
- hosts:
- argocd.example.com
secretName: argocd-tls
4.2.2 方式二:Manifest 安装(快速验证)
直接使用官方提供的安装清单:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
注意: Manifest 方式默认不包含 Ingress 资源。你需要手动创建 Ingress 对象,或使用
kubectl port-forward 临时暴露服务。
4.3 安装后的验证与初始密码获取
安装完成后,检查 Pod 状态:
kubectl get pods -n argocd
# 预期输出:所有 Pod 处于 Running 状态
获取初始 admin 密码:
kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d
提示: 首次登录后请立即修改密码:
argocd account update-password。
4.4 配置 Ingress 与 TLS
Ingress 是外部访问 Argo CD API Server 的入口。我们使用 nginx-ingress 作为控制器,cert-manager 自动签发 Let's Encrypt 证书。
4.4.1 手动创建 Ingress 资源(适用于 Manifest 方式)
# argocd-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-ingress
namespace: argocd
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
ingressClassName: nginx
tls:
- hosts:
- argocd.example.com
secretName: argocd-tls
rules:
- host: argocd.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 443
kubectl apply -f argocd-ingress.yaml
4.4.2 验证 TLS 证书与 Ingress 连通性
检查证书是否签发成功:
kubectl get certificate -n argocd
# 预期输出:READY=True
通过域名访问 Argo CD Web UI:
curl -k https://argocd.example.com
# 应返回 Argo CD 的登录页面 HTML
关键检查点:
- Ingress 的
backend-protocol: HTTPS注解必须设置,否则 Argo CD 会返回 502。 - 若使用
ssl-passthrough,请确保 nginx-ingress 启动时启用了--enable-ssl-passthrough参数。 - 证书 secret 名称必须与 Ingress 的
tls.secretName一致。
4.5 架构总览:组件与流量路径
下图展示了安装完成后,外部请求如何通过 Ingress 到达 Argo CD 各组件:
4.6 安装后快速检查清单
完成安装后,请逐项确认以下状态:
- Pod 状态:
kubectl get pods -n argocd所有 Pod 均为 Running。 - Service 暴露:
kubectl get svc -n argocd确认 argocd-server 类型为 ClusterIP 或 NodePort。 - Ingress 状态:
kubectl get ingress -n argocd显示 ADDRESS 已分配。 - TLS 证书:
kubectl get certificate -n argocdREADY 为 True。 - API 可达性:
curl -k https://argocd.example.com/api/version返回 JSON 版本信息。 - CLI 登录:
argocd login argocd.example.com --username admin --password <初始密码>成功。
常见问题:
- Ingress 返回 502:检查
nginx.ingress.kubernetes.io/backend-protocol: HTTPS注解是否缺失。 - 证书签发失败:确认 cert-manager 已安装,ClusterIssuer 名称正确,DNS 记录指向 Ingress 公网 IP。
- Helm 安装后 Pod 启动失败:检查 values.yaml 中
global.domain是否与 Ingress 域名一致。