4. Argo CD 安装与配置:使用 Helm 或 Operator 在 K8s 集群中安装 Argo CD、配置 Ingress 与 TLS、初始管理员密码获取
本章聚焦于在 Kubernetes 集群中部署 Argo CD 的两种主流方式:Helm Chart 与 Operator。同时涵盖生产环境必备的 Ingress 与 TLS 配置,以及首次登录时管理员密码的获取方法。正确的安装与配置是后续镜像供应链安全策略的基础。
4.1 安装方式对比:Helm vs Operator
Argo CD 官方提供两种安装途径,适用于不同的运维场景。下表从关键维度进行对比:
| 维度 | Helm Chart | Operator (Red Hat / Community) |
|---|---|---|
| 复杂度 | 中等,需手动管理 values 文件 | 较低,Operator 自动处理配置 |
| 自定义程度 | 高,几乎可覆盖所有参数 | 中,受限于 CRD 定义 |
| 升级策略 | 手动 helm upgrade | Operator 生命周期管理 |
| 生产推荐 | ⭐ 推荐(灵活可控) | 适合 OpenShift 或自动化运维 |
| 社区活跃度 | 官方主推,更新及时 | 跟随上游,略有延迟 |
建议: 对于标准 Kubernetes 集群,优先选择 Helm 方式。Operator 更适合已经采用 Operator 模式管理中间件的团队,或运行在 Red Hat OpenShift 上的环境。
4.2 使用 Helm 安装 Argo CD
Helm 安装是生产环境中最常用的方式。以下步骤基于 Argo CD 官方 Helm Chart 仓库。
4.2.1 添加 Helm 仓库并创建命名空间
# 添加官方 Helm 仓库
helm repo add argo https://argoproj.github.io/argo-helm
# 更新本地仓库索引
helm repo update
# 创建独立的命名空间
kubectl create namespace argocd
4.2.2 使用自定义 values 文件安装
创建一个 values-argocd.yaml 文件,包含生产环境的基础配置:
# values-argocd.yaml
global:
# 安全上下文,非 root 运行
securityContext:
runAsNonRoot: true
runAsUser: 999
server:
# 启用 Ingress,后续配置
ingress:
enabled: false
# 配置 service 类型,生产建议 ClusterIP
service:
type: ClusterIP
configs:
# 关闭内置的 dex 配置,使用本地用户
cm:
dex.config: ""
# 配置管理员账号(可选,后续通过密码获取)
secret:
argocdServerAdminPassword: ""
argocdServerAdminPasswordMtime: ""
# 启用高可用模式(生产推荐)
controller:
replicas: 2
repoServer:
replicas: 2
server:
replicas: 2
redis:
enabled: true
replicas: 3
执行安装命令:
helm install argocd argo/argo-cd \
--namespace argocd \
--values values-argocd.yaml \
--version 7.0.0 # 指定版本,避免意外升级
版本锁定: 务必使用
--version 参数锁定 Chart 版本。Argo CD 大版本升级可能涉及 CRD 变更,未锁定的安装可能导致集群状态不一致。
4.3 使用 Operator 安装 Argo CD
Operator 方式通过自定义资源 (CRD) 声明 Argo CD 实例。以下以社区 Operator 为例。
4.3.1 安装 Operator
# 使用 OLM (Operator Lifecycle Manager) 安装
kubectl create -f https://raw.githubusercontent.com/argoproj-labs/argocd-operator/master/deploy/olm/argocd-operator.yaml
# 等待 Operator Pod 就绪
kubectl wait --for=condition=Ready pod -l control-plane=argocd-operator -n argocd --timeout=120s
4.3.2 创建 ArgoCD 实例
Operator 安装完成后,通过 ArgoCD 自定义资源创建实例:
# argocd-instance.yaml
apiVersion: argoproj.io/v1alpha1
kind: ArgoCD
metadata:
name: example-argocd
namespace: argocd
spec:
# 高可用配置
ha:
enabled: true
redis:
replicas: 3
# 服务类型
server:
service:
type: ClusterIP
# 禁用内置 Dex
dex:
openShiftOAuth: false
config: ""
# 应用 CR
kubectl apply -f argocd-instance.yaml
Operator 优势: 自动处理备份、升级、健康检查等运维任务。适合需要“声明式管理 Argo CD 本身”的团队。
4.4 配置 Ingress 与 TLS
生产环境必须通过 Ingress 暴露 Argo CD Web UI 和 API,并配置 TLS 加密。以下以 nginx-ingress-controller 和 cert-manager 为例。
4.4.1 创建 TLS 证书(使用 cert-manager)
# Certificate 资源
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: argocd-tls
namespace: argocd
spec:
secretName: argocd-tls-secret
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
commonName: argocd.yourdomain.com
dnsNames:
- argocd.yourdomain.com
4.4.2 创建 Ingress 资源
# argocd-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-ingress
namespace: argocd
annotations:
# 后端协议为 HTTPS(Argo CD Server 默认 443)
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
# 重写目标路径
nginx.ingress.kubernetes.io/rewrite-target: /
# 启用 SSL 重定向
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
ingressClassName: nginx
tls:
- hosts:
- argocd.yourdomain.com
secretName: argocd-tls-secret
rules:
- host: argocd.yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 443
关键注解:
backend-protocol: "HTTPS" 是 nginx-ingress 与 Argo CD 通信的必需配置。Argo CD Server 默认监听 443 端口并启用 TLS,Ingress 必须使用 HTTPS 转发。
4.5 初始管理员密码获取
安装完成后,Argo CD 会自动生成一个随机密码。获取方式取决于安装方法。
4.5.1 Helm 安装的密码获取
Helm 安装时,密码存储在 Secret argocd-initial-admin-secret 中:
# 获取初始密码
kubectl get secret argocd-initial-admin-secret \
-n argocd \
-o jsonpath="{.data.password}" | base64 -d
# 输出示例(密码为随机字符串)
# xK8sP@ssw0rd!2024
4.5.2 Operator 安装的密码获取
Operator 创建的实例,密码存储在 <instance-name>-cluster 的 Secret 中:
# 获取 Operator 创建的密码
kubectl get secret example-argocd-cluster \
-n argocd \
-o jsonpath="{.data.admin\.password}" | base64 -d
# 输出示例
# operator-generated-password-123
4.5.3 首次登录与密码修改
使用获取的密码登录后,建议立即修改密码:
# 通过 CLI 修改密码
argocd login argocd.yourdomain.com --username admin --password <初始密码>
argocd account update-password
# 或通过 Web UI:用户信息 -> 设置 -> 更新密码
安全提醒: 初始密码仅用于首次登录。生产环境必须修改为强密码,并考虑集成 SSO(如 Dex、Keycloak)或 OIDC 进行统一身份认证。切勿将初始密码用于日常运维。
4.6 安装架构总览
下图展示了 Argo CD 安装后的核心组件及其关系:
4.7 安装后验证清单
完成安装后,建议按以下清单逐项验证:
- Pod 状态: 所有 Pod 处于
Running状态,且READY列显示为1/1或2/2(高可用模式)。 - Service 连通性: 通过
kubectl port-forward临时暴露服务,验证 Web UI 可访问。 - Ingress 与 TLS: 使用
curl -v https://argocd.yourdomain.com检查证书链和重定向。 - CLI 登录: 使用
argocd login命令验证 API 连通性。 - 密码修改: 确认初始密码已修改,且新密码生效。
生产环境基线: 建议将 Argo CD 自身的配置(包括安装 values 文件、Ingress 定义、证书)也纳入 Git 仓库管理,实现“GitOps 管理 GitOps”。