協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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 欄位來說明每個專案的用途,以及應該使用它的對象。
定期檢閱專案許可:定期稽核專案,以確保限制仍符合團隊需求和安全性要求。
其他資源
-
設定 Argo CD 許可 - 設定 RBAC 和 Identity Center 整合
-
建立應用程式 - 在專案中建立應用程式
-
使用 ApplicationSets - 將 ApplicationSets 與多叢集部署的專案搭配使用
-
Argo CD 專案文件
- 完整上游參考