

 **協助改進此頁面** 

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

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

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

# 註冊目標叢集
<a name="argocd-register-clusters"></a>

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

## 先決條件
<a name="_prerequisites"></a>
+ 建立 Argo CD 功能的 EKS 叢集
+  `kubectl` 設定為與您的叢集通訊
+ 對於遠端叢集：適當的 IAM 許可和存取項目

## 註冊本機叢集
<a name="_register_the_local_cluster"></a>

若要將應用程式部署至執行 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` 不支援預設值。

## 註冊遠端叢集
<a name="_register_remote_clusters"></a>

若要部署至遠端叢集：

 **步驟 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::111122223333:role/ArgoCDCapabilityRole}} \
  --type STANDARD
```

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

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

```
aws eks associate-access-policy \
  --region {{region-code}} \
  --cluster-name {{remote-cluster}} \
  --principal-arn {{arn:aws:iam::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
```

## 跨帳戶叢集
<a name="_cross_account_clusters"></a>

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

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

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

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

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

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

## 驗證叢集註冊
<a name="_verify_cluster_registration"></a>

檢視已註冊的叢集：

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

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

## 私有叢集
<a name="_private_clusters"></a>

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

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

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

## 存取項目 RBAC 要求
<a name="_access_entry_rbac_requirements"></a>

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

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

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

### Argo CD 的最低許可
<a name="_minimum_permissions_for_argo_cd"></a>

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

 **讀取許可 （全叢集）**：Argo CD 必須能夠跨叢集讀取以下項目的所有資源類型和自訂資源定義 (CRDs)：
+ 資源探索和運作狀態檢查
+ 偵測所需和實際狀態之間的偏離
+ 在部署之前驗證資源

 **寫入許可 （命名空間特定）**：Argo CD 需要建立、更新和刪除應用程式中所定義資源的許可：
+ 部署應用程式工作負載 （部署、服務、ConfigMaps 等）
+ 套用自訂資源 (CRDs)
+ 管理應用程式生命週期

### 快速設定
<a name="_quick_setup"></a>

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

```
aws eks associate-access-policy \
  --region {{region-code}} \
  --cluster-name {{my-cluster}} \
  --principal-arn {{arn:aws:iam::111122223333:role/ArgoCDCapabilityRole}} \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

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

### 最低權限的生產設定
<a name="_production_setup_with_least_privilege"></a>

對於生產環境，建立自訂 Kubernetes RBAC，以授予：
+ 整個叢集對所有 資源的讀取存取權 （適用於探索和運作狀態檢查）
+ 命名空間特定的寫入存取 （適用於部署）

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

```
aws eks associate-access-policy \
  --region {{region-code}} \
  --cluster-name {{my-cluster}} \
  --principal-arn {{arn:aws:iam::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 會在檢查應用程式運作狀態時顯示錯誤。

## 使用專案限制叢集存取
<a name="_restrict_cluster_access_with_projects"></a>

透過在 中設定允許的目標叢集和命名空間，使用專案來控制應用程式可以部署到哪些叢集和命名空間`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 專案](argocd-projects.md)。

## 其他資源
<a name="_additional_resources"></a>
+  [使用 Argo CD 專案](argocd-projects.md) - 組織應用程式並強制執行安全界限
+  [建立應用程式](argocd-create-application.md) - 部署您的第一個應用程式
+  [使用 ApplicationSets](argocd-applicationsets.md) - 使用 ApplicationSets 部署到多個叢集
+  [Argo CD 考量事項](argocd-considerations.md) - 多叢集模式和跨帳戶設定
+  [宣告式叢集設定](https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/#clusters) - 上游叢集組態參考