Argo CD 考量事項 - Amazon EKS

協助改進此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Argo CD 考量事項

本主題涵蓋使用 Argo CD 的 EKS 功能的重要考量,包括規劃、許可、身分驗證和多叢集部署模式。

規劃

部署 Argo CD 之前,請考慮下列事項:

儲存庫策略:判斷您的應用程式資訊清單將存放在何處 (CodeCommit、GitHub、GitLab、Bitbucket)。規劃不同環境的儲存庫結構和分支策略。

身分驗證方法:決定是否使用 AWS Identity Center for SSO 或直接管理 Argo CD 使用者。生產環境建議使用 SSO。

RBAC 策略:規劃哪些團隊或使用者應具有管理員、編輯器或檢視器存取權。將這些映射到 AWS Identity Center 群組或 Argo CD 角色。

多叢集架構:判斷您是否會從單一 Argo CD 執行個體管理多個叢集。考慮為 Argo CD 使用專用管理叢集。

應用程式組織:規劃如何建構應用程式和 ApplicationSets。考慮使用專案,依團隊或環境組織應用程式。

同步政策:決定應用程式是否應自動同步或需要手動核准。自動化同步對於開發很常見,對於生產則是手動。

許可

如需 IAM 功能角色、信任政策和安全最佳實務的詳細資訊,請參閱 Amazon EKS 功能 IAM 角色EKS 功能的安全考量

IAM 功能角色概觀

當您建立 Argo CD 功能資源時,您會提供 IAM 功能角色。與 ACK 不同,Argo CD 主要管理 Kubernetes 資源,而不是直接管理 AWS 資源。不過,以下項目需要 IAM 角色:

  • 在 CodeCommit 中存取私有 Git 儲存庫

  • 與 AWS Identity Center 整合以進行身分驗證

  • 在 AWS Secrets Manager 中存取秘密 (如果已設定)

  • 跨叢集部署至其他 EKS 叢集

CodeCommit 整合

如果您使用的是 CodeCommit 儲存庫,請連接具有讀取許可的政策:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:GitPull" ], "Resource": "*" } ] }
重要

對於生產用途,請將 Resource 欄位限制為特定儲存庫 ARNs,而不是使用 "*"

範例:

"Resource": "arn:aws:codecommit:us-west-2:111122223333:my-app-repo"

這會將 Argo CD 的存取權限制為僅需要管理的儲存庫。

Secrets Manager 整合

如果您要將儲存庫登入資料儲存在 Secrets Manager 中,請連接具有讀取許可的政策:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "arn:aws:secretsmanager:*:*:secret:argocd/*" } ] }

基本設定

對於具有公有 Git 儲存庫的基本 Argo CD 功能,除了信任政策之外,不需要額外的 IAM 政策。

身分驗證

AWS Identity Center 整合

Argo CD 受管功能直接與 AWS Identity Center (先前稱為 AWS SSO) 整合,可讓您使用現有的身分提供者進行身分驗證。

當您設定 AWS Identity Center 整合時:

  1. 使用者透過 EKS 主控台存取 Argo CD UI

  2. 他們使用 AWS Identity Center 進行身分驗證 (可聯合到您的公司身分提供者)

  3. AWS Identity Center 提供使用者和群組資訊給 Argo CD

  4. Argo CD 會根據您的組態,將使用者和群組映射至 RBAC 角色

  5. 使用者只會看到他們有權存取的應用程式和資源

使用 Identity Center 許可集簡化存取

AWS Identity Center 在使用 Argo CD 時提供兩種不同的身分驗證路徑:

Argo CD API 身分驗證: Identity Center 為 Argo CD UI 和 API 提供 SSO 身分驗證。這是透過 Argo CD 功能的 RBAC 角色映射來設定。

EKS 叢集存取:Argo CD 功能使用客戶提供的 IAM 角色,透過存取項目向 EKS 叢集進行驗證。您可以手動設定這些存取項目來新增或移除許可。

您可以使用 Identity Center 許可集來簡化身分管理,方法是允許單一身分同時存取 Argo CD 和 EKS 叢集。這可降低額外負荷,只需跨兩個系統管理一個身分,而不是維護 Argo CD 存取和叢集存取的個別登入資料。

RBAC 角色映射

Argo CD 具有內建角色,您可以映射到 AWS Identity Center 使用者和群組:

ADMIN:完整存取所有應用程式和設定。可以建立、更新和刪除應用程式。可以管理 Argo CD 組態。

EDITOR:可以建立和修改應用程式。無法變更 Argo CD 設定或刪除應用程式。

VIEWER:唯讀存取應用程式。可以檢視應用程式狀態和歷史記錄。無法進行變更。

注意

角色名稱區分大小寫,且必須為大寫 (ADMIN、EDITOR、VIEWER)。

重要

EKS 功能與 AWS Identity Center 整合支援每個 Argo CD 功能最多 1,000 個身分。身分可以是使用者或群組。

多叢集部署

Argo CD 受管功能支援多叢集部署,可讓您從單一 Argo CD 執行個體管理跨開發、預備和生產叢集的應用程式。

多叢集的運作方式

當您向 Argo CD 註冊其他叢集時:

  1. 您可以建立依 ARN 參考目標 EKS 叢集的叢集秘密

  2. 您可以建立以不同叢集為目標的應用程式或 ApplicationSets

  3. Argo CD 會連線至每個叢集,以部署應用程式和監看資源

  4. 您可以從單一 Argo CD UI 檢視和管理所有叢集

多叢集的先決條件

註冊其他叢集之前:

  • 在目標叢集上為 Argo CD 功能角色建立存取項目

  • 確保 Argo CD 功能與目標叢集之間的網路連線

  • 驗證存取目標叢集的 IAM 許可

註冊叢集

argocd 命名空間中使用 Kubernetes Secrets 註冊叢集。

取得目標叢集 ARN。將 region-code 取代為目標叢集所在的 AWS 區域,並將 target-cluster 取代為目標叢集的名稱。

aws eks describe-cluster \ --region region-code \ --name target-cluster \ --query 'cluster.arn' \ --output text

使用叢集 ARN 建立叢集秘密:

apiVersion: v1 kind: Secret metadata: name: target-cluster namespace: argocd labels: argocd.argoproj.io/secret-type: cluster type: Opaque stringData: name: target-cluster server: arn:aws:eks:us-west-2:111122223333:cluster/target-cluster project: default
重要

server 欄位中使用 EKS 叢集 ARN,而不是 Kubernetes API 伺服器 URL。受管功能需要 ARNs才能識別目標叢集。

套用秘密:

kubectl apply -f cluster-secret.yaml

在目標叢集上設定存取項目

目標叢集必須具有存取項目,以授予 Argo CD 功能角色部署應用程式的許可。將 region-code 取代為目標叢集所在的 AWS 區域,將 target-cluster 取代為目標叢集的名稱,並將 ARN 取代為 Argo CD 功能角色 ARN。

aws eks create-access-entry \ --region region-code \ --cluster-name target-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --type STANDARD \ --kubernetes-groups system:masters
注意

對於生產用途,請考慮使用更嚴格的 Kubernetes 群組,而非 system:masters

私有叢集存取

Argo CD 受管功能可以部署到全私有 EKS 叢集,而不需要 VPC 對等互連或專用聯網組態。 會自動 AWS 管理 Argo CD 功能與私有遠端叢集之間的連線。

跨帳戶部署

對於跨帳戶部署,將 Argo CD IAM 功能角色從來源帳戶新增至目標叢集的 EKS 存取項目:

  1. 在目標帳戶中,在目標 EKS 叢集上建立存取項目

  2. 使用來源帳戶中的 Argo CD IAM 功能角色 ARN 做為委託人

  3. 為存取項目設定適當的 Kubernetes RBAC 許可

  4. 使用其 EKS 叢集 ARN 在 Argo CD 中註冊目標叢集

不需要額外的 IAM 角色建立或信任政策組態—EKS 存取項目會處理跨帳戶存取。

最佳實務

使用宣告性來源做為事實來源:將所有應用程式資訊清單存放在 Git 儲存庫、Helm 登錄檔或 OCI 映像中,以啟用版本控制、稽核追蹤和協同合作。

實作適當的 RBAC:使用 AWS Identity Center 整合來控制誰可以存取和管理 Argo CD 中的應用程式。Argo CD 支援對應用程式 (部署、Pod、ConfigMaps、秘密) 內資源的精細存取控制。

使用 ApplicationSets 進行多環境部署:使用 ApplicationSets 在具有不同組態的多個叢集或命名空間中部署應用程式。

生命週期管理

應用程式同步政策

控制 Argo CD 同步應用程式的方式:

手動同步:應用程式需要手動核准才能同步變更。建議用於生產環境。

自動同步:偵測到 Git 變更時,應用程式會自動同步。常見於開發和預備環境。

自我修復:自動還原對叢集所做的手動變更。確保叢集狀態符合 Git。

刪除:自動刪除從 Git 移除的資源。請謹慎使用 ,因為這可能會刪除資源。

應用程式運作狀態

Argo CD 會持續監控應用程式運作狀態:

  • 運作狀態良好:所有資源都如預期般執行

  • 進行中:正在建立或更新資源

  • 降級:某些資源運作狀態不佳

  • 已暫停:應用程式已暫停

  • 遺失:叢集中缺少資源

同步視窗

設定同步時段以控制應用程式可以同步的時間:

  • 僅允許在維護時段進行同步

  • 上班時間的區塊同步

  • 排程特定時間的自動同步

  • 將同步時段用於需要暫時停止所有同步的中斷玻璃案例

Webhook 組態可加快同步速度

根據預設,Argo CD 每 6 分鐘輪詢一次 Git 儲存庫,以偵測變更。如需更靈敏的部署,請將 Git Webhook 設定為在推送變更時觸發立即同步。

Webhooks 提供數種優點:

  • 推送程式碼時的立即同步回應 (秒與分鐘)

  • 減少輪詢負荷並改善系統效能

  • 更有效率地使用 API 速率限制

  • 透過更快的意見回饋獲得更好的使用者體驗

Webhook 端點

Argo CD 功能提供用於接收 Git 通知的 Webhook 端點。在叢集功能索引標籤下的 EKS 主控台中尋找 Webhook URL,或使用 CLI AWS 擷取它:

aws eks describe-capability \ --cluster-name my-cluster \ --capability-name my-argocd \ --query 'capability.configuration.argoCd.webhookUrl' \ --output text \ --region region-code

依 Git 提供者設定 Webhook

GitHub:在您的儲存庫設定中,使用 Argo CD Webhook URL 新增 Webhook。將內容類型設定為 application/json,然後選取「僅推送事件」。

GitLab:在您的專案設定中,使用 Argo CD Webhook URL 新增 Webhook。啟用「推送事件」和選用的「標籤推送事件」。

Bitbucket:在您的儲存庫設定中,使用 Argo CD Webhook URL 新增 Webhook。選取「儲存庫推送」作為觸發。

CodeCommit:建立在 CodeCommit 儲存庫狀態變更時觸發的 Amazon EventBridge 規則,並將通知傳送至 Argo CD Webhook 端點。

如需詳細 Webhook 組態指示,請參閱 Argo CD Webhook 組態

注意

Webhook 補充輪詢 - 它們不會取代它。Argo CD 會繼續輪詢儲存庫做為備用機制,以防 Webhook 通知遺失。

後續步驟