3. 环境搭建:安装 Argo CD(Kubernetes 方式)、配置 Ingress 与 TLS、初始登录与密码管理
本章是课程实验环境的基石。我们将使用 Kubernetes 原生方式部署 Argo CD,配置安全的 Ingress 入口与 TLS 证书,并完成初始登录与密码管理。完成本步骤后,你将拥有一个可用于后续“存储版本漂移校准”实验的完整 Argo CD 实例。
3.1 部署架构概览
下图展示了本次环境搭建的核心组件与流量路径:用户通过 HTTPS 访问 Ingress Controller,Ingress 将 TLS 终止后的请求转发至 Argo CD Server 的 443 端口;Argo CD Server 再与 Kubernetes API Server、Redis 及 Repo Server 交互。
3.2 安装 Argo CD(Kubernetes 方式)
官方推荐使用 high availability 或 core 安装清单。本课程采用标准 install.yaml,包含所有核心组件。执行以下命令创建 argocd 命名空间并部署 Argo CD:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
部署完成后,检查 Pod 状态:
kubectl get pods -n argocd
预期输出应包含以下运行中的 Pod:
| 组件 | Pod 名称前缀 | 副本数 | 功能说明 |
|---|---|---|---|
| API Server | argocd-server-* | 1 | 提供 UI、CLI 和 API 接口 |
| Repo Server | argocd-repo-server-* | 1 | 克隆 Git 仓库并生成 manifests |
| Application Controller | argocd-application-controller-* | 1 | 监控应用状态并执行同步 |
| Redis | argocd-redis-* | 1 | 缓存与临时会话存储 |
| Dex (可选) | argocd-dex-server-* | 1 | SSO 身份认证(本课程未启用) |
Pending 状态,请检查集群是否有足够的资源(建议至少 2 核 CPU、4 GB 内存)。可以使用 kubectl describe pod -n argocd <pod-name> 查看具体原因。
3.3 配置 Ingress 与 TLS
为了通过 HTTPS 安全访问 Argo CD UI,我们需要创建 Ingress 资源并配置 TLS 证书。本课程使用自签名证书进行演示,生产环境应使用 Let's Encrypt 或企业 CA 签发的证书。
3.3.1 创建 TLS 证书 Secret
生成自签名证书并创建 Kubernetes Secret:
# 生成自签名证书(有效期 365 天)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout argocd-tls.key -out argocd-tls.crt \
-subj "/CN=argocd.example.com" \
-addext "subjectAltName=DNS:argocd.example.com"
# 创建 TLS Secret
kubectl create secret tls argocd-server-tls \
--cert=argocd-tls.crt --key=argocd-tls.key \
-n argocd
3.3.2 创建 Ingress 资源
以下 Ingress 配置将 argocd.example.com 的 HTTPS 流量路由至 Argo CD Server 的 443 端口:
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"
spec:
ingressClassName: nginx
tls:
- hosts:
- argocd.example.com
secretName: argocd-server-tls
rules:
- host: argocd.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 443
ssl-passthrough: "true" 要求 Ingress Controller 支持 SSL Passthrough(如 nginx-ingress)。如果使用 AWS ALB Ingress Controller 或其他不支持 passthrough 的控制器,需要改用 backend-protocol: "HTTPS" 并在 Argo CD Server 侧配置证书。
应用 Ingress 配置:
kubectl apply -f argocd-ingress.yaml
验证 Ingress 是否生效:
kubectl get ingress -n argocd
输出应显示 argocd.example.com 的地址已分配。在本地 /etc/hosts 文件中添加映射(如果使用 Minikube 或 kind),然后通过浏览器访问 https://argocd.example.com。
3.4 初始登录与密码管理
Argo CD 安装完成后,默认会创建一个 admin 用户。初始密码存储在名为 argocd-initial-admin-secret 的 Secret 中。
3.4.1 获取初始密码
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d
复制输出的密码,使用 admin 用户名登录:
argocd login argocd.example.com --username admin --password <初始密码> --insecure
3.4.2 修改密码
首次登录后,应立即修改密码:
argocd account update-password
系统会依次提示输入当前密码、新密码和确认新密码。修改成功后,后续登录均使用新密码。
3.4.3 密码管理最佳实践
| 实践项 | 建议 | 说明 |
|---|---|---|
| 初始密码轮换 | 立即修改 | 安装后 5 分钟内完成修改,避免 Secret 泄露风险 |
| 密码复杂度 | ≥16 位,含大小写字母、数字、特殊字符 | Argo CD 默认无复杂度校验,需人工保证 |
| Secret 清理 | 删除初始 Secret | kubectl delete secret argocd-initial-admin-secret -n argocd |
| SSO 集成 | 推荐使用 OIDC/LDAP | 避免本地密码管理,降低凭据泄露面 |
| 审计日志 | 启用 API 审计 | 记录所有登录和操作行为,便于溯源 |
kubectl delete secret argocd-initial-admin-secret -n argocd 删除初始密码 Secret。这是安全审计的基线要求,也是后续“存储版本漂移校准”实验的前提条件。
3.5 验证环境可用性
执行以下命令确认 Argo CD 核心组件正常运行:
# 检查所有 Pod 状态
kubectl get pods -n argocd
# 检查 Service 端点
kubectl get svc -n argocd
# 通过 CLI 查看当前版本
argocd version --client
# 通过 CLI 查看服务端版本(需先登录)
argocd version --server
预期输出示例:
argocd: v2.12.0+xxx
BuildDate: 2025-01-15T10:00:00Z
GitCommit: abcdef123456
GoVersion: go1.22.0
Compiler: gc
Platform: linux/amd64