使用 Argo CD 專案 - Amazon EKS

協助改進此頁面

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

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

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

使用 Argo CD 專案

Argo CD Projects (AppProject) 提供應用程式的邏輯分組和存取控制。專案定義應用程式可以使用的 Git 儲存庫、目標叢集和命名空間,在共用 Argo CD 執行個體中啟用多租戶和安全界限。

何時使用專案

使用專案來:

  • 依團隊、環境或業務單位分隔應用程式

  • 限制團隊可以從中部署的儲存庫

  • 限制團隊可以部署到哪些叢集和命名空間

  • 強制執行資源配額和允許的資源類型

  • 使用護欄提供自助式應用程式部署

預設專案

每個 Argo CD 功能都包含一個default專案,允許存取所有儲存庫、叢集和命名空間。雖然適用於初始測試,但請建立具有明確生產使用限制的專用專案。

如需預設專案組態及其限制方式的詳細資訊,請參閱 Argo CD 文件中的預設專案

建立專案

透過將 AppProject 資源套用至叢集來建立專案。

範例:團隊特定專案

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a namespace: argocd spec: description: Applications for Team A # Source repositories this project can deploy from sourceRepos: - 'https://github.com/my-org/team-a-*' - 'https://github.com/my-org/shared-libs' # Destination clusters and namespaces destinations: - name: dev-cluster namespace: team-a-dev - name: prod-cluster namespace: team-a-prod # Allowed resource types clusterResourceWhitelist: - group: '' kind: Namespace namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service - group: '' kind: ConfigMap

套用專案:

kubectl apply -f team-a-project.yaml

專案組態

來源儲存庫

控制此專案中的應用程式可以使用哪些 Git 儲存庫:

spec: sourceRepos: - 'https://github.com/my-org/app-*' # Wildcard pattern - 'https://github.com/my-org/infra' # Specific repo

您可以使用萬用字元和否定模式 (! 字首) 來允許或拒絕特定儲存庫。如需詳細資訊,請參閱 Argo CD 文件中的管理專案

目的地限制

限制應用程式可以部署的位置:

spec: destinations: - name: prod-cluster # Specific cluster by name namespace: production - name: '*' # Any cluster namespace: team-a-* # Namespace pattern
重要

使用特定叢集名稱和命名空間模式,而不是生產專案的萬用字元。這可防止意外部署到未經授權的叢集或命名空間。

您可以使用萬用字元和否定模式來控制目的地。如需詳細資訊,請參閱 Argo CD 文件中的管理專案

資源限制

控制可以部署哪些 Kubernetes 資源類型:

叢集範圍的資源

spec: clusterResourceWhitelist: - group: '' kind: Namespace - group: 'rbac.authorization.k8s.io' kind: Role

命名空間範圍的資源

spec: namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service - group: '' kind: ConfigMap - group: 's3.services.k8s.aws' kind: Bucket

使用封鎖清單拒絕特定資源:

spec: namespaceResourceBlacklist: - group: '' kind: Secret # Prevent direct Secret creation

將應用程式指派給專案

建立應用程式時,請在 spec.project 欄位中指定專案:

apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app namespace: argocd spec: project: team-a # Assign to team-a project source: repoURL: https://github.com/my-org/my-app path: manifests destination: name: prod-cluster namespace: team-a-prod

沒有指定專案的應用程式會使用default專案。

專案角色和 RBAC

專案可以為精細存取控制定義自訂角色。將專案角色映射至您功能組態中的 AWS Identity Center 使用者和群組,以控制誰可以同步、更新或刪除應用程式。

範例:具有開發人員和管理角色的專案

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a namespace: argocd spec: sourceRepos: - '*' destinations: - name: '*' namespace: 'team-a-*' roles: - name: developer description: Developers can sync applications policies: - p, proj:team-a:developer, applications, sync, team-a/*, allow - p, proj:team-a:developer, applications, get, team-a/*, allow groups: - team-a-developers - name: admin description: Admins have full access policies: - p, proj:team-a:admin, applications, *, team-a/*, allow groups: - team-a-admins

如需專案角色、CI/CD 管道的 JWT 權杖和 RBAC 組態的詳細資訊,請參閱 Argo CD 文件中的專案角色

常見模式

以環境為基礎的專案

為每個環境建立個別專案:

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: production namespace: argocd spec: sourceRepos: - 'https://github.com/my-org/*' destinations: - name: prod-cluster namespace: '*' # Strict resource controls for production clusterResourceWhitelist: [] namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service

以團隊為基礎的專案

使用專用專案隔離團隊:

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: platform-team namespace: argocd spec: sourceRepos: - 'https://github.com/my-org/platform-*' destinations: - name: '*' namespace: 'platform-*' # Platform team can manage cluster resources clusterResourceWhitelist: - group: '*' kind: '*'

多叢集專案

使用一致的政策部署到多個叢集:

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: global-app namespace: argocd spec: sourceRepos: - 'https://github.com/my-org/global-app' destinations: - name: us-west-cluster namespace: app - name: eu-west-cluster namespace: app - name: ap-south-cluster namespace: app

最佳實務

從限制性專案開始:從縮小的許可開始,並視需要擴展,而不是從廣泛的存取開始。

使用命名空間模式:在命名空間限制 (例如 team-a-*) 中利用萬用字元來允許彈性,同時維持邊界。

獨立生產專案:使用專用專案進行生產,搭配更嚴格的控制和手動同步政策。

文件專案目的:使用 description 欄位來說明每個專案的用途,以及應該使用它的對象。

定期檢閱專案許可:定期稽核專案,以確保限制仍符合團隊需求和安全性要求。

其他資源