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 入口。
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 进行安装,便于版本管理和参数定制。以下是标准安装步骤:
- 添加 Helm 仓库
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
- 创建命名空间
kubectl create namespace argocd
- 安装 Argo CD(基础版)
helm install argocd argo/argo-cd \
--namespace argocd \
--set server.service.type=ClusterIP \
--set server.ingress.enabled=false
- 验证安装状态
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显示默认项目
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 重新生成 |