Argo CD 企业 GitOps 与租户隔离

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
API Application Programming Interface 应用程序编程接口
CD Continuous Delivery / Continuous Deployment 持续交付/持续部署;是否自动上线取决于流程
ESO External Secrets Operator 将外部秘密系统中的值同步到 Kubernetes 的控制器
HA High Availability 高可用
HPA Horizontal Pod Autoscaler Pod 水平自动扩缩容器
OIDC OpenID Connect 基于 OAuth 2.0 的身份认证协议
PDB Pod Disruption Budget Pod 中断预算,约束自愿驱逐
RBAC Role-Based Access Control 基于角色的访问控制
SA Service Account 服务账号,供程序或工作负载使用的身份
SHA Secure Hash Algorithm 安全散列算法
SSO Single Sign-On 单点登录
TLS Transport Layer Security 传输层安全协议

场景:平台维护集群级组件,commerce 团队只能发布 orders。前置:基线、受保护的私有 Git、企业 OIDC、至少三台可调度节点;与 Flux 二选一管理同一批资源。

安装与权限边界#

固定已验证的 Argo CD release,下载该 tag 的 HA 安装清单,审查镜像/RBAC/资源、反亲和性和 Redis 配置后纳入平台 Git。HA 不等于数据库式的数据持久化,Git 和密钥/SSO 配置仍需可恢复。

export ARGO_VERSION='vREPLACE_VERSION'
curl -fsSL "https://raw.githubusercontent.com/argoproj/argo-cd/$ARGO_VERSION/manifests/ha/install.yaml" -o argocd-ha.yaml
kubectl create namespace argocd --dry-run=client -o yaml | kubectl apply -f -
kubectl apply --server-side -n argocd -f argocd-ha.yaml
kubectl -n argocd get deploy,statefulsets,pods

安装清单只是基底:通过 overlay 加资源上限、跨节点/区分散、PDB、NetworkPolicy;仅私网 TLS 入口或受控 port-forward 访问管理 API。先验证 OIDC/应急身份,再禁用本地 admin。OIDC client secret 通过企业密钥系统注入,不写 ConfigMap/Git。安装与 HA

平台创建 AppProject,保存 orders-project.yaml:

apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata: {name: commerce, namespace: argocd}
spec:
  sourceRepos: [https://git.example.com/commerce/orders-deploy.git]
  destinations:
    - namespace: orders
      server: https://kubernetes.default.svc
  clusterResourceWhitelist: []
  namespaceResourceWhitelist:
    - {group: apps, kind: Deployment}
    - {group: "", kind: Service}
    - {group: "", kind: ConfigMap}
    - {group: policy, kind: PodDisruptionBudget}
    - {group: autoscaling, kind: HorizontalPodAutoscaler}
  roles:
    - name: deployer
      groups: [commerce-deployers]
      policies:
        - p, proj:commerce:deployer, applications, get, commerce/*, allow
        - p, proj:commerce:deployer, applications, sync, commerce/*, allow

Namespace、SA、ExternalSecret、网络策略、HTTPRoute 由平台 repo 管理,避免业务通过修改身份/入口扩大权限。按需求显式扩展白名单,不开 */*。AppProject 是 Argo 授权边界,还要限制 Argo 的目标集群凭据、Kubernetes RBAC,以及谁能修改 Project/Application;不得允许租户部署到 argocd namespace。Project 限制

Git 仓库用只读 deploy key 或受限 GitHub App;通过 Secret 声明 repository,凭据引用 ESO,禁止命令行打印 token。全局 RBAC 的默认角色不得授予写权限,显式将企业组绑定到 Project 角色。

Hands-on:受控发布订单服务#

保存 orders-application.yaml;targetRevision 替换为审核过的 commit SHA,路径包含已适配的真实业务清单。

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata: {name: orders-staging, namespace: argocd}
spec:
  project: commerce
  source:
    repoURL: https://git.example.com/commerce/orders-deploy.git
    targetRevision: REPLACE_COMMIT_SHA
    path: environments/staging
  destination:
    server: https://kubernetes.default.svc
    namespace: orders
  syncPolicy:
    syncOptions: [PruneLast=true]
kubectl apply -f orders-project.yaml -f orders-application.yaml
# 已完成 argocd CLI 的企业 SSO 登录。
argocd app diff orders-staging
argocd app sync orders-staging
argocd app wait orders-staging --health --sync --timeout 600

首次不自动 prune。演练通过后,按环境启用自动 sync/selfHeal,并给生产设置发布窗口;删除资源先审查 diff。启用 HPA 后配置 replicas 的差异忽略和相应 sync 行为,不能与 HPA 抢副本数。

企业验收与恢复#

演练 必须看到
非 commerce 组登录 无发布权限;只读范围符合租户策略
提交 ClusterRole / 其他 namespace 资源 Project/RBAC 拒绝,现有业务保持正常
修改预生产 Service 的受控字段 OutOfSync 可见;selfHeal 开启时恢复 Git 状态
滚动重建一个 Argo 控制器 Pod 业务继续服务,协调恢复;队列和告警可观测
发布不兼容镜像 业务验收失败,Git revert/固定旧 SHA 后重新 sync;数据库兼容性另验

Application 删除可能级联删除业务,finalizer/prune 需平台控制。Argo 故障通常不停止已运行业务,但新发布/自愈受影响;恢复 Git、仓库凭据、OIDC 和集群凭据后验证 diff,再开启自动化。

升级按 tag 在 staging 重放;记录同步延迟、错误、repo-server 性能和 HA 故障证据。参考 声明式配置。

完整部署参数#

锁定版本与完整生产配置提供实际 values、资源/分散/PDB、身份与网络配置,以及负向验收和恢复步骤。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭