3. Argo CD 安装:使用 Helm 安装、配置 Ingress 与 TLS、获取初始管理员密码

本章将指导你使用 Helm 在 Kubernetes 集群中安装 Argo CD,配置 Ingress 与 TLS 以提供安全的 HTTPS 访问,并获取初始管理员密码。这是 GitOps 实践的基础设施起点,也是后续与 Flux 协同运维的前提。

3.1 安装架构概览

下图展示了 Argo CD 安装后的核心组件及其关系,包括 API Server、Repository Server、Application Controller 以及外部 Ingress 入口。

Argo CD 安装架构图 Argo CD 安装架构图 外部用户 Ingress / TLS API Server Repo Server App Controller Redis (缓存) 说明:Ingress 负责 TLS 终结,API Server 是统一入口,Repo Server 同步 Git,App Controller 驱动集群状态。

3.2 前置条件

在开始安装之前,请确保满足以下条件:

条件 要求 验证命令
Kubernetes 集群 v1.23+,至少 2 个 Worker 节点 kubectl version --short
Helm v3.8+ helm version
Ingress Controller 已部署(如 nginx-ingress) kubectl get pods -n ingress-nginx
证书管理 cert-manager 或已有 TLS 证书 kubectl get clusterissuer
DNS 解析 域名指向 Ingress 负载均衡器 IP nslookup argocd.example.com
提示: 如果使用 minikube 或 kind 测试,建议先安装 nginx-ingress 并启用 --set controller.hostPort.enabled=true。

3.3 使用 Helm 安装 Argo CD

推荐使用 Argo CD 官方 Helm Chart 进行安装,便于版本管理和参数定制。以下是标准安装步骤:

  1. 添加 Helm 仓库
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
  1. 创建命名空间
kubectl create namespace argocd
  1. 安装 Argo CD(基础版)
helm install argocd argo/argo-cd \
  --namespace argocd \
  --set server.service.type=ClusterIP \
  --set server.ingress.enabled=false
  1. 验证安装状态
kubectl get pods -n argocd
kubectl get svc -n argocd
关键参数说明: 生产环境建议将 server.service.type 设为 ClusterIP,通过 Ingress 暴露;测试环境可直接设为 LoadBalancer。

3.4 配置 Ingress 与 TLS

为了安全访问 Argo CD Web UI 和 API,必须配置 Ingress 并启用 TLS。以下提供两种常见方案:

方案一:使用 cert-manager 自动签发 Let's Encrypt 证书

helm upgrade argocd argo/argo-cd \
  --namespace argocd \
  --set server.ingress.enabled=true \
  --set server.ingress.ingressClassName=nginx \
  --set server.ingress.hosts[0]=argocd.example.com \
  --set server.ingress.tls[0].hosts[0]=argocd.example.com \
  --set server.ingress.tls[0].secretName=argocd-tls \
  --set server.ingress.annotations."cert-manager\.io/cluster-issuer"=letsencrypt-prod

方案二:使用已有 TLS 证书(手动创建 Secret)

# 创建 TLS Secret
kubectl create secret tls argocd-tls \
  --cert=/path/to/tls.crt \
  --key=/path/to/tls.key \
  -n argocd

# 更新 Helm 配置
helm upgrade argocd argo/argo-cd \
  --namespace argocd \
  --set server.ingress.enabled=true \
  --set server.ingress.ingressClassName=nginx \
  --set server.ingress.hosts[0]=argocd.example.com \
  --set server.ingress.tls[0].hosts[0]=argocd.example.com \
  --set server.ingress.tls[0].secretName=argocd-tls
注意: 如果 Ingress 配置后无法访问,请检查 Ingress Controller 日志以及 DNS 解析是否正确。使用 kubectl describe ingress -n argocd 查看 Ingress 事件。

3.5 获取初始管理员密码

Argo CD 安装后会自动生成一个随机密码,存储在 Secret 中。以下是获取密码的三种方法:

方法 命令 说明
方法一:直接提取 kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d 最常用,适用于初始安装后
方法二:通过 CLI 获取 argocd admin initial-password -n argocd 需要安装 argocd CLI
方法三:查看 Secret YAML kubectl get secret argocd-initial-admin-secret -n argocd -o yaml 手动解码 password 字段
安全建议: 首次登录后,请立即修改默认密码:argocd account update-password。生产环境建议集成 OIDC/LDAP 认证。

3.6 验证安装与访问

完成上述配置后,通过浏览器访问 https://argocd.example.com,使用 admin 和获取到的密码登录。以下验证清单供参考:

  • Web UI 访问: 页面正常加载,无证书警告
  • CLI 登录: argocd login argocd.example.com --username admin --password <密码>
  • 集群状态: argocd cluster list 显示当前集群
  • 项目列表: argocd proj list 显示默认项目
安装验证流程 安装验证流程 Helm 安装 Ingress + TLS 获取密码 登录验证 验证要点:Pod 全部 Running、Ingress 返回 200、密码可解密、Web UI 可登录。

3.7 常见问题与排错

问题 可能原因 解决方案
Pod 启动失败 资源不足 / 镜像拉取失败 检查 kubectl describe pod 事件,增加资源限制或更换镜像源
Ingress 返回 503 Service 端口不匹配 / 后端 Pod 未就绪 确认 server.service.targetPort 为 8080,检查 Pod 日志
证书无效 Secret 名称错误 / cert-manager 未就绪 检查 Secret 是否存在,kubectl get certificate -n argocd
密码无法解码 Secret 被删除或修改 使用 argocd admin initial-password 重新生成