註冊目標叢集 - Amazon EKS

協助改進此頁面

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

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

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

註冊目標叢集

註冊叢集,讓 Argo CD 能夠將應用程式部署到叢集。您可以註冊 Argo CD 正在執行的相同叢集 (本機叢集) 或不同帳戶或區域中的遠端叢集。註冊叢集後,它會保持在未知連線狀態,直到您在該叢集內建立應用程式為止。若要在叢集註冊後建立 Argo CD 應用程式,請參閱 建立應用程式

先決條件

  • 建立 Argo CD 功能的 EKS 叢集

  • kubectl 設定為與您的叢集通訊

  • 對於遠端叢集:適當的 IAM 許可和存取項目

註冊本機叢集

若要將應用程式部署到執行 Argo CD 的相同叢集,請將其註冊為部署目標。

重要

Argo CD 功能不會自動註冊本機叢集。您必須明確註冊,才能將應用程式部署到相同的叢集。您可以使用叢集名稱in-cluster,與大多數線上 Argo CD 範例相容。

注意

EKS 存取項目會自動為具有 Argo CD 功能角色的本機叢集建立,但預設不會授予 Kubernetes RBAC 許可。這遵循最低權限原則 - 您必須根據您的使用案例明確設定 Argo CD 所需的許可。例如,如果您只使用此叢集做為 Argo CD 中樞來管理遠端叢集,則不需要任何本機部署許可。如需組態選項,請參閱下方的存取項目 RBAC 要求一節。

使用 Argo CD CLI

argocd cluster add <cluster-context-name> \ --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/my-cluster \ --name local-cluster

使用 Kubernetes 秘密

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

套用組態:

kubectl apply -f local-cluster.yaml
注意

server 欄位中使用 EKS 叢集 ARN,而不是 Kubernetes API 伺服器 URL。受管功能需要 ARNs才能識別叢集。kubernetes.default.svc 不支援預設值。

註冊遠端叢集

若要部署至遠端叢集:

步驟 1:在遠端叢集上建立存取項目

region-code 取代為遠端叢集所在的 AWS 區域,將 remote-cluster 取代為遠端叢集的名稱,並將 ARN 取代為 Argo CD 功能角色 ARN。

aws eks create-access-entry \ --region region-code \ --cluster-name remote-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --type STANDARD

步驟 2:將存取政策與 Kubernetes RBAC 許可建立關聯

Access Entry 需要 Kubernetes RBAC 許可,Argo CD 才能部署應用程式。若要快速入門,您可以使用 AmazonEKSClusterAdminPolicy

aws eks associate-access-policy \ --region region-code \ --cluster-name remote-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \ --access-scope type=cluster
重要

AmazonEKSClusterAdminPolicy 提供完整的叢集管理員存取權 (相當於 system:masters)。這對於開始使用很方便,但不應用於生產環境。對於生產環境,請建立存取項目與自訂 Kubernetes 群組的關聯,並建立適當的角色或 ClusterRole 繫結,以使用更嚴格的許可。如需最低權限組態,請參閱下方的生產設定一節。

步驟 3:在 Argo CD 中註冊叢集

使用 Argo CD CLI

argocd cluster add <cluster-context-name> \ --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster \ --name remote-cluster

使用 Kubernetes 秘密

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

套用組態:

kubectl apply -f remote-cluster.yaml

跨帳戶叢集

若要部署到不同 AWS 帳戶中的叢集:

  1. 在目標帳戶中,使用來源帳戶中的 Argo CD IAM 功能角色 ARN 做為委託人,在目標 EKS 叢集上建立存取項目

  2. 將存取政策與適當的 Kubernetes RBAC 許可建立關聯

  3. 使用其 EKS 叢集 ARN 在 Argo CD 中註冊叢集

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

叢集 ARN 格式包含 區域,因此跨區域部署使用與相同區域部署相同的程序。

驗證叢集註冊

檢視已註冊的叢集:

kubectl get secrets -n argocd -l argocd.argoproj.io/secret-type=cluster

或在設定 → 叢集下的 Argo CD UI 中檢查叢集狀態。

私有叢集

Argo CD 功能提供全私有 EKS 叢集的透明存取,而不需要 VPC 對等互連或專用聯網組態。

AWS 會自動管理 Argo CD 功能與私有遠端叢集之間的連線。

只需使用私有叢集的 ARN 註冊 - 不需要額外的聯網設定。

存取項目 RBAC 要求

當您建立 Argo CD 功能時,會自動為功能角色建立 EKS 存取項目,但預設不會授予 Kubernetes RBAC 許可。此刻意設計遵循最低權限原則 - 不同的使用案例需要不同的許可。

例如:* 如果您僅使用叢集做為 Argo CD 中樞來管理遠端叢集,則不需要本機部署許可 * 如果您在本機部署應用程式,則需要整個叢集的讀取存取和特定命名空間的寫入存取 * 如果您需要建立 CRDs,則需要額外的叢集管理許可

您必須根據您的需求明確設定 Argo CD 所需的許可。

Argo CD 的最低許可

Argo CD 需要兩種類型的許可才能在沒有錯誤的情況下運作:

讀取許可 (全叢集):Argo CD 必須能夠跨叢集讀取下列所有資源類型和自訂資源定義 (CRDs):

  • 資源探索和運作狀態檢查

  • 偵測所需和實際狀態之間的偏離

  • 在部署之前驗證資源

寫入許可 (命名空間特定):Argo CD 需要建立、更新和刪除應用程式中所定義資源的許可:

  • 部署應用程式工作負載 (部署、服務、ConfigMaps 等)

  • 套用自訂資源 (CRDs)

  • 管理應用程式生命週期

快速設定

若要快速入門、測試或開發環境,請使用 AmazonEKSClusterAdminPolicy

aws eks associate-access-policy \ --region region-code \ --cluster-name my-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \ --access-scope type=cluster
重要

AmazonEKSClusterAdminPolicy 提供完整的叢集管理員存取權 (相當於 system:masters),包括能夠建立 CRDs、修改整個叢集的資源,以及部署到任何命名空間。這對於開發和 POCs 來說很方便,但不應用於生產環境。對於生產,請使用下列最低權限設定。

最低權限的生產設定

對於生產環境,建立自訂 Kubernetes RBAC,以授予:

  • 整個叢集對所有 資源的讀取存取權 (適用於探索和運作狀態檢查)

  • 命名空間特定的寫入存取 (適用於部署)

步驟 1:將存取項目與自訂 Kubernetes 群組建立關聯

aws eks associate-access-policy \ --region region-code \ --cluster-name my-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy \ --access-scope type=namespace,namespaces=app-namespace

步驟 2:建立 ClusterRole 以進行讀取存取

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: argocd-read-all rules: # Read access to all resources for discovery and health checks - apiGroups: ["*"] resources: ["*"] verbs: ["get", "list", "watch"]

步驟 3:建立角色以寫入存取應用程式命名空間

apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: argocd-deploy namespace: app-namespace rules: # Full access to deploy application resources - apiGroups: ["*"] resources: ["*"] verbs: ["*"]

步驟 4:將角色繫結至 Kubernetes 群組

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: argocd-read-all subjects: - kind: Group name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: argocd-read-all apiGroup: rbac.authorization.k8s.io --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: argocd-deploy namespace: app-namespace subjects: - kind: Group name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: argocd-deploy apiGroup: rbac.authorization.k8s.io
注意

存取項目的群組名稱格式eks-access-entry:後面接著主體 ARN。針對 Argo CD 應部署應用程式的每個命名空間重複 RoleBinding。

重要

Argo CD 必須能夠讀取叢集中的所有資源類型,以進行運作狀態檢查和探索,即使只部署到特定的命名空間。如果沒有整個叢集的讀取存取權,Argo CD 會在檢查應用程式運作狀態時顯示錯誤。

使用專案限制叢集存取

透過在 中設定允許的目標叢集和命名空間,使用專案來控制應用程式可以部署到哪些叢集和命名空間spec.destinations

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: production namespace: argocd spec: destinations: - server: arn:aws:eks:us-west-2:111122223333:cluster/prod-cluster namespace: '*' - server: arn:aws:eks:eu-west-1:111122223333:cluster/prod-eu-cluster namespace: '*' sourceRepos: - 'https://github.com/example/production-apps'

如需詳細資訊,請參閱使用 Argo CD 專案

其他資源