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 多集群架构图
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 初始化流程
- 定义角色:至少创建
admin、dev、readonly三个角色。 - 绑定用户组:通过 OIDC / LDAP 的
groups声明映射到角色。 - 设置默认策略:
policy.default建议设为role:readonly,防止未授权操作。 - 验证权限:使用
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 控制平面投入生产使用。下一阶段将深入配置同步策略与钩子机制。