協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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' # Source namespaces (required for EKS capability) sourceNamespaces: - argocd - team-a-dev - team-a-prod # 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 文件中的管理專案
來源命名空間
使用 EKS Argo CD 功能時,自訂 AppProject 定義中需要 spec.sourceNamespaces 欄位。此欄位指定哪些命名空間可以包含參考此專案的應用程式或 ApplicationSets:
重要
這是 EKS Argo CD 功能的必要欄位,不同於 OSS Argo CD,其中此欄位是選用的。
預設 AppProject 行為
default AppProject 會自動在 中包含argocd命名空間sourceNamespaces。如果您需要在其他命名空間中建立應用程式或 ApplicationSets,請修改 sourceNamespaces 欄位以新增這些命名空間:
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: default namespace: argocd spec: sourceNamespaces: - argocd # Already included by default - team-a-apps # Add additional namespaces as needed - team-b-apps
自訂 AppProject 組態
建立自訂 AppProject 時,您必須手動包含argocd系統命名空間,以及您計劃建立應用程式或 ApplicationSets 的任何其他命名空間:
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a-project namespace: argocd spec: description: Applications for Team A # Required: Manually specify all namespaces sourceNamespaces: - argocd # ArgoCD system namespace (required) - team-a-dev # Custom namespace for dev Applications - team-a-prod # Custom namespace for prod Applications # Source repositories this project can deploy from sourceRepos: - 'https://github.com/my-org/team-a-*' # Destination restrictions destinations: - namespace: 'team-a-*' server: arn:aws:eks:us-west-2:111122223333:cluster/my-cluster # Use cluster ARN from: aws eks describe-cluster
注意
如果您省略來自 的命名空間sourceNamespaces,在該命名空間中建立的應用程式或 ApplicationSets 將無法參考此專案,導致部署失敗。
目的地限制
限制應用程式可以部署的位置:
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 專案文件
- 完整上游參考