2. Argo CD 安装与配置:Helm 安装、Ingress、TLS 与初始密码

本章聚焦于生产级 Argo CD 的部署落地。我们将使用 Helm 作为包管理工具,完成 Argo CD 的核心组件安装,并配置 Ingress 与 TLS 证书 实现安全的公网/内网访问,最后获取 admin 初始密码 完成登录验证。这是后续多环境与多租户实践的基础设施前提。

2.1 安装架构概览

下图展示了 Argo CD 在 Kubernetes 集群中的核心组件部署关系,以及外部流量通过 Ingress 进入 API Server 的路径。

Argo CD 安装架构与流量路径 用户/浏览器 Ingress Controller TLS 证书 argocd-server Kubernetes 集群内部 (argocd 命名空间) argocd-repo-server argocd-application-controller argocd-redis argocd-dex 说明:API Server 是唯一对外暴露的组件,Ingress 将 HTTPS 流量转发至 argocd-server 的 443 端口。 repo-server、controller、redis、dex 仅在集群内部通信,不对外暴露。

2.2 使用 Helm 安装 Argo CD

Helm 是部署 Argo CD 的推荐方式,便于版本管理和参数化配置。以下步骤基于 Helm 3.x 和 Argo CD 官方 Helm Chart。

2.2.1 添加 Helm 仓库并更新

helm repo add argo https://argoproj.github.io/argo-helm
helm repo update

2.2.2 创建命名空间并安装

kubectl create namespace argocd
helm install argocd argo/argo-cd \
  --namespace argocd \
  --version 5.51.4 \
  --set server.service.type=ClusterIP \
  --set server.ingress.enabled=false
提示: 生产环境建议将 server.service.type 设置为 ClusterIP,通过 Ingress 对外暴露,避免直接使用 LoadBalancer 暴露 API Server。

2.2.3 验证安装状态

kubectl get pods -n argocd
kubectl get svc -n argocd

预期输出应包含以下核心 Pod 处于 Running 状态:

Pod 名称 组件角色 默认副本数
argocd-server-xxx API Server / Web UI 1
argocd-repo-server-xxx Git 仓库同步 1
argocd-application-controller-xxx 应用状态控制器 1
argocd-redis-xxx 缓存与会话存储 1
argocd-dex-xxx SSO / OIDC 集成 1

2.3 Ingress 配置

Ingress 负责将外部 HTTPS 流量路由至 argocd-server 服务。以下示例基于 nginx-ingress-controller,适用于大多数 Kubernetes 发行版。

2.3.1 创建 Ingress 资源

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"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
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" 允许 Ingress 将 TLS 流量直接透传至 argocd-server,避免二次解密;
backend-protocol: "HTTPS" 告知 Ingress 后端服务使用 HTTPS 协议;
force-ssl-redirect: "true" 强制 HTTP 请求重定向至 HTTPS。

2.4 TLS 证书配置

生产环境必须为 Argo CD 配置有效的 TLS 证书。推荐使用 cert-manager 自动签发 Let's Encrypt 证书,或使用自签名证书用于内部测试。

2.4.1 使用 cert-manager 自动签发(推荐)

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: argocd-tls
  namespace: argocd
spec:
  secretName: argocd-tls
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  dnsNames:
  - argocd.example.com

2.4.2 手动创建自签名证书(测试环境)

openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout tls.key -out tls.crt \
  -subj "/CN=argocd.example.com" \
  -addext "subjectAltName=DNS:argocd.example.com"

kubectl create secret tls argocd-tls \
  --cert=tls.crt --key=tls.key \
  -n argocd
证书管理对比:
方式 适用场景 优点 缺点
cert-manager + Let's Encrypt 生产环境 自动续期、受信任 CA 需要公网 DNS 验证
自签名证书 开发/测试 快速、无需公网 浏览器不信任、需手动导入
企业 CA 签发 内网生产 内网信任链完整 需 CA 管理员配合

2.5 获取初始 admin 密码

Argo CD 安装完成后,admin 用户的初始密码存储在名为 argocd-initial-admin-secret 的 Secret 中。以下是获取密码的两种方式。

2.5.1 从 Secret 中提取

kubectl get secret argocd-initial-admin-secret \
  -n argocd \
  -o jsonpath="{.data.password}" | base64 -d

2.5.2 使用 Argo CD CLI 登录验证

argocd login argocd.example.com \
  --username admin \
  --password $(kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d) \
  --insecure
安全建议: 首次登录后,请立即修改 admin 密码:argocd account update-password。生产环境建议集成 SSO/OIDC,避免使用共享 admin 账号。

2.6 安装后验证清单

完成上述步骤后,使用以下清单确认安装与配置的正确性:

检查项 验证方法 预期结果
Pod 状态 kubectl get pods -n argocd 所有 Pod 均为 Running
Ingress 可达性 curl -k https://argocd.example.com 返回 Argo CD API 响应
TLS 证书 openssl s_client -connect argocd.example.com:443 证书链完整、域名匹配
CLI 登录 argocd login ... 登录成功,无报错
Web UI 访问 浏览器打开 https://argocd.example.com 显示 Argo CD 登录页面

至此,Argo CD 的核心安装与安全访问配置已完成。下一阶段将基于此环境,深入多环境部署策略与多租户隔离方案。