

 **協助改進此頁面** 

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

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

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

# 使用 Argo CD 專案
<a name="argocd-projects"></a>

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

## 何時使用專案
<a name="_when_to_use_projects"></a>

使用專案來：
+ 依團隊、環境或業務單位分隔應用程式
+ 限制團隊可以從中部署的儲存庫
+ 限制團隊可以部署到哪些叢集和命名空間
+ 強制執行資源配額和允許的資源類型
+ 使用護欄提供自助式應用程式部署

## 預設專案
<a name="_default_project"></a>

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

如需預設專案組態及其限制方式的詳細資訊，請參閱 Argo CD 文件中的[預設專案](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#the-default-project)。

## 建立專案
<a name="_create_a_project"></a>

透過將 `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
```

## 專案組態
<a name="_project_configuration"></a>

### 來源儲存庫
<a name="_source_repositories"></a>

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

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

您可以使用萬用字元和否定模式 (`!` 字首） 來允許或拒絕特定儲存庫。如需詳細資訊，請參閱 Argo CD 文件中的[管理專案](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects)。

### 目的地限制
<a name="_destination_restrictions"></a>

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

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

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

您可以使用萬用字元和否定模式來控制目的地。如需詳細資訊，請參閱 Argo CD 文件中的[管理專案](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects)。

### 資源限制
<a name="_resource_restrictions"></a>

控制可以部署哪些 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
```

## 將應用程式指派給專案
<a name="_assign_applications_to_projects"></a>

建立應用程式時，請在 `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
<a name="_project_roles_and_rbac"></a>

專案可以為精細存取控制定義自訂角色。將專案角色映射至您功能組態中的 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 文件中的[專案角色](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#project-roles)。

## 常見模式
<a name="_common_patterns"></a>

### 以環境為基礎的專案
<a name="_environment_based_projects"></a>

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

```
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
```

### 以團隊為基礎的專案
<a name="_team_based_projects"></a>

使用專用專案隔離團隊：

```
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: '*'
```

### 多叢集專案
<a name="_multi_cluster_projects"></a>

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

```
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
```

## 最佳實務
<a name="_best_practices"></a>

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

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

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

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

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

## 其他資源
<a name="_additional_resources"></a>
+  [設定 Argo CD 許可](argocd-permissions.md) - 設定 RBAC 和 Identity Center 整合
+  [建立應用程式](argocd-create-application.md) - 在專案中建立應用程式
+  [使用 ApplicationSets](argocd-applicationsets.md) - 將 ApplicationSets 與多叢集部署的專案搭配使用
+  [Argo CD 專案文件](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/) - 完整上游參考