3. Argo CD 安装与配置:在 Kubernetes 集群中安装 Argo CD、配置 Ingress 与 TLS、初始登录与密码管理

本章聚焦于在 Kubernetes 集群中完成 Argo CD 的完整部署链路,涵盖核心组件安装、对外暴露方式(Ingress + TLS)以及首次登录的安全凭证管理。以下内容基于生产环境最佳实践,确保安装过程可审计、可重复且安全合规。

3.1 安装 Argo CD:两种主流方式对比

Argo CD 官方提供两种安装方式:快速安装(Quick Start) 与 高可用安装(HA)。生产环境建议使用 HA 模式,以保障控制平面的稳定性。

安装方式 适用场景 核心组件 资源要求(最小)
Quick Start 开发/测试、POC argocd-server, argocd-repo-server, argocd-redis, argocd-dex 2 vCPU, 4 GB 内存
HA 生产环境、多集群管理 argocd-server (多副本), argocd-repo-server, argocd-redis-ha, argocd-application-controller 4 vCPU, 8 GB 内存
最佳实践: 在集群节点扩容场景下,Argo CD 控制平面应部署在独立的 管理集群 中,避免与业务工作负载争抢资源。HA 模式下的 Redis 哨兵集群可有效防止因节点扩容导致的会话丢失。

执行安装命令(以 HA 模式为例):

# 创建命名空间
kubectl create namespace argocd

# 安装 Argo CD HA 版本
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/ha/install.yaml

# 验证 Pod 状态
kubectl get pods -n argocd -w

安装完成后,核心 Pod 应全部进入 Running 状态。若出现 CrashLoopBackOff,请检查集群资源是否充足,或调整 argocd-server 的 resources.requests 配置。

3.2 配置 Ingress 与 TLS:安全暴露 Argo CD 控制台

Argo CD 默认不暴露外部访问,需通过 Ingress 或 LoadBalancer 对外提供服务。生产环境必须启用 TLS 加密,防止凭证与敏感信息在传输过程中泄露。

3.2.1 Ingress 配置清单

以下示例使用 nginx-ingress-controller 作为入口网关,并绑定 TLS 证书(通过 cert-manager 自动签发或手动指定 Secret)。

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
关键安全配置:
  • ssl-passthrough: "true" 确保 TLS 终止在 Argo CD 服务端,而非 Ingress 控制器,避免二次解密风险。
  • 若使用自签名证书,请提前创建 argocd-tls Secret:kubectl create secret tls argocd-tls --cert=tls.crt --key=tls.key -n argocd
  • 禁止在 Ingress 上配置 allow-http: "false" 以外的弱安全策略。

3.2.2 验证 TLS 配置

配置完成后,通过以下命令验证 Ingress 是否正常路由:

# 检查 Ingress 状态
kubectl get ingress -n argocd

# 测试 HTTPS 访问(替换为实际域名)
curl -v -k https://argocd.example.com

若返回 HTTP/2 200 且响应中包含 location: /auth/login,则说明 Ingress 与 TLS 配置成功。

3.3 初始登录与密码管理:安全第一

Argo CD 安装完成后,默认使用 admin 账户登录,初始密码存储在 Secret 中。以下步骤演示如何安全获取并修改密码。

3.3.1 获取初始密码

# 方式一:直接读取 Secret(推荐)
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

# 方式二:通过 Argo CD CLI 获取(需先安装 CLI)
argocd admin initial-password -n argocd
安全提示: 初始密码仅用于首次登录,登录后必须立即修改。建议使用 openssl rand -base64 32 生成高强度密码,并存储在密码管理器中。

3.3.2 修改 admin 密码

通过 Argo CD CLI 修改密码:

# 登录(使用初始密码)
argocd login argocd.example.com --username admin --password <初始密码> --insecure

# 修改密码
argocd account update-password --current-password <旧密码> --new-password <新密码>

若无法使用 CLI,可通过 Kubernetes Secret 直接更新:

# 生成新密码的 bcrypt 哈希
htpasswd -bnBC 10 "" <新密码> | tr -d ':\n' | sed 's/$2y/$2a/'

# 更新 Secret
kubectl -n argocd patch secret argocd-secret -p '{"stringData": {"admin.password": "<bcrypt哈希>"}}'

3.3.3 密码策略建议

策略项 推荐值 说明
密码长度 ≥ 16 位 包含大小写字母、数字、特殊字符
密码轮换周期 90 天 可通过外部工具(如 Vault)自动轮换
多因素认证 启用(SSO + MFA) 推荐集成 OIDC 提供商(如 Dex、Keycloak)
审计日志 启用 记录所有登录与操作行为

3.4 安装与配置流程总览

下图展示了从安装到安全登录的完整流程,帮助理解各组件间的依赖关系。

Argo CD 安装与配置流程 Argo CD 安装与配置流程 创建命名空间 安装 Argo CD (HA) 配置 Ingress + TLS 获取初始密码 登录并修改密码 验证 HTTPS 访问 关键说明: • 安装前确保集群有足够资源(HA 模式至少 4 vCPU、8 GB 内存)。 • Ingress 必须启用 TLS,且 ssl-passthrough 设置为 true。 • 初始密码仅用于首次登录,修改后请妥善保管。

3.5 常见问题与排错

  • Pod 启动失败: 检查 kubectl describe pod <pod-name> -n argocd 中的 Events 字段,常见原因为资源不足或镜像拉取失败。
  • Ingress 返回 503: 确认 argocd-server Service 的端口映射是否正确(应为 443 → 8080)。
  • TLS 证书无效: 检查 Secret 是否存在且包含正确的 tls.crt 和 tls.key。
  • 密码修改失败: 确保当前密码正确,且新密码符合复杂度要求。