2. Argo CD 安装与配置:Helm 安装、Ingress、TLS 与初始密码
本章聚焦于生产级 Argo CD 的部署落地。我们将使用 Helm 作为包管理工具,完成 Argo CD 的核心组件安装,并配置 Ingress 与 TLS 证书 实现安全的公网/内网访问,最后获取 admin 初始密码 完成登录验证。这是后续多环境与多租户实践的基础设施前提。
2.1 安装架构概览
下图展示了 Argo CD 在 Kubernetes 集群中的核心组件部署关系,以及外部流量通过 Ingress 进入 API Server 的路径。
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 的核心安装与安全访问配置已完成。下一阶段将基于此环境,深入多环境部署策略与多租户隔离方案。