阿里雲ACK One GitOps:輕鬆實現多團隊多集羣應用交付

作者:蔡靖

GitOps 概述、

應用分發 GitOps 的核心是以 Git 倉庫作爲應用部署的唯一來源,持續同步 Git 倉庫中應用狀態到 Kubernetes 集羣上。CNCF 於 2023 年底發佈的一項評估 GitOps 使用趨勢的微觀調查結果 [ 1] ,其數據顯示 GitOps 已經成爲大多數開發者實現快速、一致、安全交付的首要選擇。2022 年 12 月 CNCF Argo 項目正式畢業 [ 2] ,標誌着 Argo 項目的穩定和成熟,也讓更多基於 Kubernetes 的用戶使用 Argo CD 來實現 GitOps CD。

GitOps 的優勢:

  • 快速交付、持續部署應用

    通過自動化的構建和部署提升部署速度;並自動同步 Kubernetes 集羣和 Git 倉庫中的應用狀態,保持狀態一致。

  • 可靠性強

    Git 倉庫作爲應用部署的唯一來源,提供版本控制,快速回滾和審計能力;實現更高的部署一致性。

  • 安全性高

    開發者使用 GitOps 無需任何 Kubernetes 集羣權限,只需要 Git 倉庫權限;自動化流程更安全,減少手動操作的出錯風險。

  • 簡單易學

    Git 易於被接受開發者接受,易於集成,無額外學習成本。

ACK One GitOps

ACK One GitOps 提供了面向多雲、多集羣、混合雲的多集羣應用 GitOps 持續交付能力。通過全託管開源的 Argo CD 項目,集成 ACK One 的多集羣、阿里雲的 RAM SSO 等能力,爲您提供開箱即用的 ArgoCD 能力,和完整、安全的多集羣應用 GitOps CD 體驗,快速、一致、安全地實現混合雲、多集羣下的應用持續部署。

下圖爲 ACK One GitOps 能力圖:

  1. 開發者通過 ArgoCD UI/CLI/Go SDK 創建 Application 或者 ApplicationSet,部署應用;

  2. 開發者更新新鏡像到鏡像倉庫,ArgoCD Image Updater 檢測到鏡像更新後,將新 tag 更新到 Git 倉庫的 yaml 中;

  3. ArgoCD 定時同步 Git 倉庫的應用狀態到雲上、雲下集羣(GitOps 中 Secret 管理基於 KMS 實現);

  4. 應用同步過程中狀態變化實時釘釘通知。

ACK One GitOps 優勢如下:

  • 託管開源 ArgoCD,提供 ArgoCD 原生 CLI 和 UI 體驗。
  • 開箱即用,免運維。
  • 專屬 ArgoCD 控制檯域名,集成阿里雲 RAM 用戶/角色 SSO 登錄,支持 ArgoCD 多租權限管理。
  • 混合雲、多集羣分發,ACK One 關聯子集羣自動加入 ArgoCD,成爲應用分發 GitOps 的目標集羣。
  • 支持 ArgoCD Applicationset,提升多集羣應用分發體驗。
  • 更安全地發佈多集羣應用,支持 GitOps 中的 Secret 管理,和 ServiceAccount 級別權限訪問子集羣。

混合雲、多集羣應用的快速部署

實現混合雲場景多集羣應用快速部署分 3 步:

  1. 先通過 ACK One 註冊集羣 [ 3] 將 IDC 集羣註冊到雲端;

  2. 再由 ACK One 艦隊 [ 4] 統一管理雲上多地域的 ACK 集羣和雲下 IDC 集羣;

  3. 再通過 ACK One GitOps 實現雲上、雲下集羣應用的自動化快速部署。

ACK One 的關聯子集羣會自動加入 ArgoCD,成爲應用分發的目標集羣,簡化了多集羣應用分發流程。

目前 ACK One 有些客戶,正使用 ACK One 管理混合云云上、雲下數十個集羣,並使用 GitOps 實現數千應用(ArgoCD Application)的快速部署。並通過 ArgoCD ApplicationSet,提升了多集羣應用的管理效率。以下是一個來自 ArgoCD 社區 [ 5] 的 ApplicationSet 的樣例 yaml,可以方便地將多個應用部署到多個集羣:

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: cluster-git
spec:
  goTemplate: true
  goTemplateOptions: ["missingkey=error"]
  generators:
    # matrix 'parent' generator
    - matrix:
        generators:
          # git generator, 'child' #1
          - git:
              repoURL: https://github.com/argoproj/argo-cd.git
              revision: HEAD
              directories:
                - path: applicationset/examples/matrix/cluster-addons/*
          # cluster generator, 'child' #2
          - clusters:
              selector:
                matchLabels:
                  argocd.argoproj.io/secret-type: cluster
  template:
    metadata:
      name: '{{.path.basename}}-{{.name}}'
    spec:
      project: '{{index .metadata.labels "environment"}}'
      source:
        repoURL: https://github.com/argoproj/argo-cd.git
        targetRevision: HEAD
        path: '{{.path.path}}'
      destination:
        server: '{{.server}}'
        namespace: '{{.path.basename}}'

另外,多集羣應用的一致性部署在很多場景也是極有必要的,一個案例是基於 ACK One 構建混合雲容災系統 [ 6] ,需要確保應用在雲上 ACK 和 雲下IDC 集羣的 Service 保持一致。使用 GitOps 可以輕鬆實現多集羣應用的一致性部署,且自動化部署可以規避手動部署的出錯風險。

多租權限管理

多團隊用戶共同使用 GitOps 系統時,往往需要多租權限控制。ACK One GitOps 集成了阿里雲 RAM 用戶和 RAM 角色 SSO 登錄,多租權限管理主要包含以下幾方面:

  1. ACK One 艦隊的權限管理,支持阿里雲 RAM 主賬號或權限管理員,爲 RAM 用戶和 RAM 角色授予艦隊和子集羣的 RBAC 權限(包括 Applicaiton 資源)。

  2. 支持阿里雲 RAM 主賬號或權限管理,在 argocd-rbac-cm 中爲 RAM 用戶和 RAM 角色授予 ArgoCD RBAC 的權限 [ 7]

  3. 支持阿里雲 RAM 主賬號或權限管理,通過 ArgoCD Projects 管理 RAM 用戶和 RAM 角色對目標集羣、倉庫、應用(Application)的 RBAC 權限。

下圖是一個多租配置例子:

  • 管理員爲 team-one 和 team-two 分別創建 1 個 project

    • team-one 的與 Application 1 和 team-one Git Repo 綁定
    • team-two 的與 Application 2 和 team-two Git Repo 綁定
  • team-one 想訪問 team-two 的 Application 2 時,會被 ArgoCD 拒絕,因爲並沒有爲 team-one 賦予 Application 2 的權限

下面給出一個管理員爲某 RAM 用戶/角色分配只讀某個應用權限的 ArgoCD Project 的樣例,可由 ArgoCD UI 創建得到:

  • 27***02 爲 RAM 用戶或 RAM 角色 ID
  • 27***02 只能對 demo project 下的 application1 執行 get(無法創建、刪除等)
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: demo
  namespace: argocd
spec:
  destinations:
  - name: '*'
    namespace: '*'
    server: '*'
  roles:
  - groups:
    - "27***02"
    name: test
    policies:
    - p, proj:demo:application1, applications, get, demo/*, allow
  sourceRepos:
  - https://github.com/AliyunContainerService/gitops-demo.git

此處是在 argocd-rbac-cmConfigMap 中配置,RAM User/Role 具有 projects 的所有操作權限的例子:

data:
  policy.csv: |
    p, role:project-admin, projects, *, *, allow
    
    g, "27***02", role:project-admin     # 爲RAM User/Role "27***02"綁定ArgoCD role:project-admin權限。
  scopes: '[uid]'

GitOps 中 Secret 管理

在多集羣 GitOps 中安全、有效地管理如授權 Token、用戶名密碼、私鑰等敏感信息,是非常必要的。ACK One GitOps 提供結合 KMS 的方案來實現 GitOps 中 Secret 管理 [ 8]

以下簡要介紹基於 ACK Secret Manager 的方案:

  1. 在要使用 Secret 的子集羣中,先安裝 ACK Secret Manager 組件;

  2. 在 KMS 憑據管家中添加憑證;

  3. 在 Git 倉庫中應用下添加 ExternalSecretyaml,並在 Deployment 中引用Secret;如下圖左邊 yaml 樣例所示。

  4. 通過 ACK One GitOps 將包含 ExternalSecret 的應用同步到子集羣中,已安裝的 ACK Secret Manager 組件會根據 ExternalSecret 創建出 Secret,供 Deployment 使用。

歡迎加入 ACK One 客戶交流釘釘羣與我們進行交流。(釘釘羣號:35688562

相關文章:

ACK One:構建混合雲同城容災系統

參考鏈接:

[1] 微觀調查結果

https://www.cncf.io/blog/2023/11/07/cncf-gitops-microsurvey-learning-on-the-job-as-gitops-goes-mainstream/

[2] 2022 年 12 月 CNCF Argo 項目正式畢業

https://www.cncf.io/announcements/2022/12/06/the-cloud-native-computing-foundation-announces-argo-has-graduated/

[3] ACK One 註冊集羣

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/overview-9?spm=a2c4g.11186623.0.0.3e4157eb3o9J3v

[4] ACK One 艦隊

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/fleet-management-overview?spm=a2c4g.11186623.0.i53

[5] 來自 ArgoCD 社區

https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators-Matrix/

[6] 基於 ACK One 構建混合雲容災系統

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/use-cases/construction-of-hybrid-cloud-disaster-recovery-system-based-on-ack-one?spm=a2c4g.11186623.0.0.47aa4a88drS2Em

[7] ArgoCD RBAC 的權限

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/manage-users-based-on-gitops?spm=a2c4g.11186623.0.0.43be734fVamflQ#6f2facdfddgxr

[8] 結合 KMS 的方案來實現 GitOps 中 Secret 管理

https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/secret-management?spm=a2c4g.11186623.0.0.630f57ebt49vEw

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章