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-tlsSecret: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 安装与配置流程总览
下图展示了从安装到安全登录的完整流程,帮助理解各组件间的依赖关系。
3.5 常见问题与排错
- Pod 启动失败: 检查
kubectl describe pod <pod-name> -n argocd中的 Events 字段,常见原因为资源不足或镜像拉取失败。 - Ingress 返回 503: 确认
argocd-serverService 的端口映射是否正确(应为 443 → 8080)。 - TLS 证书无效: 检查 Secret 是否存在且包含正确的
tls.crt和tls.key。 - 密码修改失败: 确保当前密码正确,且新密码符合复杂度要求。