3. 安装与部署:Helm Chart安装、Operator安装、多集群安装、Ingress/TLS配置、RBAC初始化

Argo CD 的部署方式直接影响生产环境的运维效率与安全性。本章围绕四种主流安装路径(Helm Chart、Operator、多集群、Ingress/TLS)以及 RBAC 初始化展开,提供可复用的部署模板与配置要点。

3.1 Helm Chart 安装

Helm 是部署 Argo CD 最推荐的方式,支持参数化配置与版本管理。官方 Chart 位于 argo/argo-cd 仓库。

3.1.1 添加仓库与安装

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

kubectl create namespace argocd

helm install argocd argo/argo-cd \
  --namespace argocd \
  --version 7.1.0 \
  --set server.service.type=LoadBalancer \
  --set configs.params."server\.insecure"=true

3.1.2 关键参数表

参数路径 默认值 生产推荐值 说明
server.service.type ClusterIP LoadBalancer / NodePort 对外暴露 API Server
configs.params.server.insecure false true(配合反向代理) 关闭内部 TLS,由 Ingress 终结
redis.metrics.enabled false true 开启 Redis 指标采集
controller.replicas 1 2 高可用副本数
server.replicas 1 2 API Server 高可用
最佳实践:使用 helm get values argocd -n argocd 导出当前部署参数,作为版本基线存入 Git 仓库。

3.2 Operator 安装

Argo CD Operator 适用于需要自动化生命周期管理(升级、备份、故障恢复)的场景。Operator 基于 ArgoCD 自定义资源(CR)驱动配置。

3.2.1 安装 Operator

kubectl create namespace argocd-operator

# 使用 OLM 安装
operator-sdk olm install
kubectl apply -f https://raw.githubusercontent.com/argoproj-labs/argocd-operator/master/deploy/olm-catalog/argocd-operator/argocd-operator.package.yaml

# 或直接部署 YAML
kubectl apply -n argocd-operator -f https://raw.githubusercontent.com/argoproj-labs/argocd-operator/master/deploy/manifests/operator.yaml

3.2.2 创建 ArgoCD 实例

apiVersion: argoproj.io/v1alpha1
kind: ArgoCD
metadata:
  name: example-argocd
  namespace: argocd
spec:
  server:
    host: argocd.example.com
    ingress:
      enabled: true
      annotations:
        kubernetes.io/ingress.class: nginx
  ha:
    enabled: true
    replicas: 2
  redis:
    metrics:
      enabled: true
Operator vs Helm 对比:Operator 提供 CR 级别的声明式管理,适合 GitOps 全链路自动化;Helm 更轻量,适合标准化部署。生产环境建议优先使用 Helm + 自定义 values 文件。

3.3 多集群安装

Argo CD 支持通过 控制平面 + 工作集群 架构管理多个 Kubernetes 集群。控制平面安装 Argo CD,工作集群仅需暴露 API Server 地址与 。

3.3.1 多集群架构图

Argo CD 多集群部署架构 控制平面 Argo CD Server Application Controller Redis / Repo Server 工作集群 A kubeconfig + Secret 目标命名空间 工作集群 B kubeconfig + Secret 目标命名空间 说明: 控制平面通过 kubeconfig Secret 管理多个工作集群,工作集群无需安装 Argo CD 组件。

3.3.2 添加工作集群

# 在工作集群获取 API Server 地址与 
kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}'
kubectl -n kube-system get secret $(kubectl -n kube-system get sa argocd-manager -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.}' | base64 -d

# 在控制平面添加集群
argocd cluster add <context-name> --name=work-cluster-a
安全注意:工作集群的 kubeconfig 应使用独立 ServiceAccount,并绑定最小 RBAC 权限(如 argocd-manager-role)。禁止使用集群管理员 。

3.4 Ingress / TLS 配置

生产环境必须通过 Ingress 暴露 Argo CD Server,并启用 TLS 终结。以下为 Nginx Ingress + Let's Encrypt 配置示例。

3.4.1 Ingress 配置示例

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argocd-ingress
  namespace: argocd
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  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: 80

3.4.2 TLS 配置参数对比

方案 证书管理 适用场景 备注
Ingress + cert-manager 自动签发与续期 生产环境,公网暴露 推荐使用 Let's Encrypt
Ingress + 手动 Secret 手动更新 内网或离线环境 需提前导入证书
Argo CD 内置 TLS 自签名证书 开发测试 不适用于生产
配置检查:部署后执行 curl -v https://argocd.example.com 验证证书链与重定向是否正常。

3.5 RBAC 初始化

Argo CD 的 RBAC 基于 argocd-rbac-cm ConfigMap 控制。初始化阶段需定义角色、策略与用户组映射。

3.5.1 RBAC 配置示例

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-rbac-cm
  namespace: argocd
data:
  policy.default: role:readonly
  policy.csv: |
    p, role:admin, applications, *, */*, allow
    p, role:admin, clusters, *, *, allow
    p, role:admin, repositories, *, *, allow
    p, role:admin, projects, *, *, allow

    p, role:dev, applications, sync, */*, allow
    p, role:dev, applications, get, */*, allow

    g, dev-team, role:dev
    g, ops-team, role:admin
  scopes: '[groups]'

3.5.2 RBAC 初始化流程

  1. 定义角色:至少创建 admin、dev、readonly 三个角色。
  2. 绑定用户组:通过 OIDC / LDAP 的 groups 声明映射到角色。
  3. 设置默认策略:policy.default 建议设为 role:readonly,防止未授权操作。
  4. 验证权限:使用 argocd account can-i 命令测试。
# 验证 admin 权限
argocd account can-i create applications --project default

# 验证 dev 权限
argocd account can-i delete applications --project default
# 预期输出:NO
安全基线:RBAC 初始化完成后,立即禁用 admin 内置账号的默认密码,并启用 SSO 集成。生产环境禁止使用本地 admin 账号进行日常操作。

3.6 部署验证清单

检查项 验证命令 预期结果
Pod 状态 kubectl get pods -n argocd 所有 Pod 处于 Running 状态
Service 暴露 kubectl get svc -n argocd argocd-server 类型为 LoadBalancer 或 NodePort
Ingress 连通性 curl -I https://argocd.example.com 返回 200 或 302
RBAC 权限 argocd account can-i get clusters YES
多集群注册 argocd cluster list 显示所有工作集群,状态为 Successful

完成以上安装与初始化步骤后,Argo CD 即可作为 GitOps 控制平面投入生产使用。下一阶段将深入配置同步策略与钩子机制。