

 **協助改進此頁面** 

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

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

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

# 建立 kro 功能
<a name="create-kro-capability"></a>

本主題說明如何在 Amazon EKS 叢集上建立 kro 功能。

## 先決條件
<a name="_prerequisites"></a>

在建立 kro 功能之前，請確定您有：
+ 執行支援 Kubernetes 版本的現有 Amazon EKS 叢集 （支援標準和延伸支援中的所有版本）
+ 足夠的 IAM 許可，可在 EKS 叢集上建立功能資源
+ （適用於 CLI/eksctl) 安裝和設定適當的 CLI 工具

**注意**  
與 ACK 和 Argo CD 不同， kro 不需要超出信任政策的額外 IAM 許可。 kro 完全在您的叢集內運作，而且不會進行 AWS API 呼叫。不過，您仍然需要為 IAM 功能角色提供適當的信任政策。如需為 kro 設定 Kubernetes RBAC 許可的資訊，請參閱 [設定 kro 許可](kro-permissions.md)。

## 選擇您的工具
<a name="_choose_your_tool"></a>

您可以使用、 AWS 管理主控台 AWS CLI 或 eksctl 建立 kro 功能：
+  [使用主控台建立 kro 功能](kro-create-console.md) - 使用 主控台進行引導式體驗
+  [使用 CLI 建立 kro AWS 功能](kro-create-cli.md) - 使用 AWS CLI 進行指令碼編寫和自動化
+  [使用 eksctl 建立 kro 功能](kro-create-eksctl.md) - 使用 eksctl 獲得 Kubernetes 原生體驗

## 當您建立 kro 功能時會發生什麼情況
<a name="_what_happens_when_you_create_a_kro_capability"></a>

當您建立 kro 功能時：

1. EKS 會建立 kro 功能服務，並將其設定為監控和管理叢集中的資源

1. 您的叢集中已安裝自訂資源定義 (CRDs)

1. 會自動為您的 IAM 功能角色建立存取項目`AmazonEKSKROPolicy`，其中 授予管理 ResourceGraphDefinitions 及其執行個體的許可 （請參閱 [EKS 功能的安全考量](capabilities-security.md))

1. 該功能假設您提供的 IAM 功能角色 （僅用於信任關係）

1. kro 開始觀察`ResourceGraphDefinition`資源及其執行個體

1. 功能狀態從 變更為 `CREATING` `ACTIVE` 

啟用後，您可以建立 ResourceGraphDefinitions 來定義自訂 APIs並建立這些 APIs的執行個體。

**注意**  
自動建立的存取項目包含 `AmazonEKSKROPolicy`，授予 kro 許可來管理 ResourceGraphDefinitions 及其執行個體。若要允許 kro 建立 ResourceGraphDefinitions 中定義的基礎 Kubernetes 資源 （例如部署、服務或 ACK 資源），您必須設定其他存取項目政策。若要進一步了解存取項目以及如何設定其他許可，請參閱 [設定 kro 許可](kro-permissions.md)和 [EKS 功能的安全考量](capabilities-security.md)。

## 後續步驟
<a name="_next_steps"></a>

建立 kro 功能之後：
+  [kro 概念](kro-concepts.md) - 了解 kro 概念和資源合成
+  [kro 概念](kro-concepts.md) - 了解 SimpleSchema、CEL 表達式和資源合成模式

# 使用主控台建立 kro 功能
<a name="kro-create-console"></a>

本主題說明如何使用 建立 kro (Kube Resource Orchestrator) 功能 AWS 管理主控台。

## 建立 kro 功能
<a name="_create_the_kro_capability"></a>

1. 在以下網址開啟 Amazon EKS 主控台：https://console.aws.amazon.com/eks/home\$1/clusters。

1. 選取您的叢集名稱以開啟叢集詳細資訊頁面。

1. 選擇**功能**索引標籤。

1. 在左側導覽中，選擇 **kro (Kube Resource Orchestrator)**。

1. 選擇**建立 kro 功能**。

1. 對於 **IAM 功能角色**：
   + 如果您已經有 IAM 功能角色，請從下拉式清單中選取它
   + 如果您需要建立角色，請選擇**建立 kro 角色** 

     這會在預先填入信任政策的新標籤中開啟 IAM 主控台。此角色不需要額外的 IAM 許可，因為 kro 完全在您的叢集中運作。

     建立角色後，返回 EKS 主控台並自動選取角色。
**注意**  
與 ACK 和 Argo CD 不同， kro 不需要信任政策以外的其他 IAM 許可。 kro 完全在您的叢集內運作，而且不會進行 AWS API 呼叫。

1. 選擇**建立**。

功能建立程序開始。

## 確認功能處於作用中狀態
<a name="_verify_the_capability_is_active"></a>

1. 在**功能**索引標籤上，檢視 kro 功能狀態。

1. 等待狀態從 變更為 `CREATING` `ACTIVE`。

1. 啟用後，此功能即可使用。

如需功能狀態和故障診斷的資訊，請參閱 [使用 功能資源](working-with-capabilities.md)。

## 授予管理 Kubernetes 資源的許可
<a name="_grant_permissions_to_manage_kubernetes_resources"></a>

當您建立 kro 功能時，系統會自動使用 建立 EKS 存取項目`AmazonEKSKROPolicy`，允許 kro 管理 ResourceGraphDefinitions 及其執行個體。不過，預設不會授予許可來建立 ResourceGraphDefinitions 中定義的基礎 Kubernetes 資源 ConfigMaps 等）。 ResourceGraphDefinitions

此刻意設計遵循最低權限原則 - 不同的 ResourceGraphDefinitions 需要不同的許可。您必須根據 ResourceGraphDefinitions 將管理的資源，明確設定 kro 所需的許可。

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

1. 在 EKS 主控台中，導覽至叢集的**存取**索引標籤。

1. 在**存取項目**下，尋找 kro 功能角色的項目 （它將具有您先前建立的角色 ARN)。

1. 選擇存取項目以開啟其詳細資訊。

1. 在**存取政策**區段中，選擇**關聯存取政策**。

1. `AmazonEKSClusterAdminPolicy` 從政策清單中選取 。

1. 針對**存取範圍**，選取**叢集**。

1. 選擇**關聯**。

**重要**  
`AmazonEKSClusterAdminPolicy` 授予建立和管理所有 Kubernetes 資源的廣泛許可，包括跨所有命名空間建立任何資源類型的能力。這對於開發和 POCs 來說很方便，但不應用於生產環境。對於生產，請建立自訂 RBAC 政策，僅授予 ResourceGraphDefinitions 將管理之特定資源所需的許可。如需設定最低權限許可的指引，請參閱 [設定 kro 許可](kro-permissions.md)和 [EKS 功能的安全考量](capabilities-security.md)。

## 確認可用的自訂資源
<a name="_verify_custom_resources_are_available"></a>

功能處於作用中狀態後，請確認叢集中是否有可用的 kro 自訂資源。

 **使用主控台** 

1. 在 Amazon EKS 主控台中導覽至您的叢集

1. 選擇**資源**索引標籤

1. 選擇**延伸模組** 

1. 選擇 **CustomResourceDefinitions** 

您應該會看到列出的`ResourceGraphDefinition`資源類型。

 **使用 kubectl** 

```
kubectl api-resources | grep kro.run
```

您應該會看到列出的`ResourceGraphDefinition`資源類型。

## 後續步驟
<a name="_next_steps"></a>
+  [kro 概念](kro-concepts.md) - 了解 kro 概念和資源合成
+  [kro 概念](kro-concepts.md) - 了解 SimpleSchema、CEL 表達式和合成模式
+  [使用 功能資源](working-with-capabilities.md) - 管理您的 kro 功能資源

# 使用 CLI 建立 kro AWS 功能
<a name="kro-create-cli"></a>

本主題說明如何使用 CLI 建立 kro (Kube Resource Orchestrator) AWS 功能。

## 先決條件
<a name="_prerequisites"></a>
+  ** AWS CLI** – 版本 `2.12.3` 或更新版本。若要檢查您的版本，請執行 `aws --version`。如需詳細資訊，請參閱《 AWS 命令列界面使用者指南》中的[安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。
+  ** `kubectl` **：命令列工具，適用於使用 Kubernetes 叢集。如需詳細資訊，請參閱[設定 `kubectl` 和 `eksctl`](install-kubectl.md)。

## 步驟 1：建立 IAM 功能角色
<a name="_step_1_create_an_iam_capability_role"></a>

建立信任政策檔案：

```
cat > kro-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

建立 IAM 角色：

```
aws iam create-role \
  --role-name KROCapabilityRole \
  --assume-role-policy-document file://kro-trust-policy.json
```

**注意**  
與 ACK 和 Argo CD 不同，kro 不需要額外的 IAM 許可。 kro 完全在您的叢集內運作，而且不會進行 AWS API 呼叫。只有建立與 EKS 功能服務的信任關係時，才需要此角色。

## 步驟 2：建立 kro 功能
<a name="_step_2_create_the_kro_capability"></a>

在叢集上建立 kro 功能資源。將 *region-code* 取代為您的叢集所在的 AWS 區域 （例如 `us-west-2`)，並將 *my-cluster* 取代為您的叢集名稱。

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --type KRO \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/KROCapabilityRole \
  --delete-propagation-policy RETAIN
```

命令會立即傳回，但當 EKS 建立所需的功能基礎設施和元件時，功能需要一些時間才會變成作用中。EKS 會在建立叢集時，在叢集中安裝與此功能相關的 Kubernetes 自訂資源定義。

**注意**  
如果您收到叢集不存在或您沒有許可的錯誤，請驗證：  
叢集名稱正確
您的 AWS CLI 已設定為正確的區域
您擁有必要的 IAM 許可

## 步驟 3：確認功能處於作用中狀態
<a name="_step_3_verify_the_capability_is_active"></a>

等待功能變成作用中。將 *region-code* 取代為您的叢集所在的 AWS 區域，並將 *my-cluster* 取代為您的叢集名稱。

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --query 'capability.status' \
  --output text
```

當狀態顯示 時，此功能已就緒`ACTIVE`。

您也可以檢視完整的功能詳細資訊：

```
aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro
```

## 步驟 4：授予管理 Kubernetes 資源的許可
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

當您建立 kro 功能時，系統會自動使用 建立 EKS 存取項目`AmazonEKSKROPolicy`，允許 kro 管理 ResourceGraphDefinitions 及其執行個體。不過，預設不會授予許可來建立 ResourceGraphDefinitions 中定義的基礎 Kubernetes 資源 ConfigMaps 等）。 ResourceGraphDefinitions

此刻意設計遵循最低權限原則：不同的 ResourceGraphDefinitions 需要不同的許可。例如：\$1 僅建立 ConfigMaps 和 Secrets 的 ResourceGraphDefinition 需要與建立部署和服務者不同的許可 \$1 建立 ACK 資源的 ResourceGraphDefinition 需要這些特定自訂資源的許可 \$1 有些 ResourceGraphDefinitions 可能只讀取現有資源，而不建立新的資源

您必須根據 ResourceGraphDefinitions 將管理的資源，明確設定 kro 所需的許可。

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

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

取得功能角色 ARN：

```
CAPABILITY_ROLE_ARN=$(aws eks describe-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-kro \
  --query 'capability.roleArn' \
  --output text)
```

關聯叢集管理員政策：

```
aws eks associate-access-policy \
  --region region-code \
  --cluster-name my-cluster \
  --principal-arn $CAPABILITY_ROLE_ARN \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**重要**  
`AmazonEKSClusterAdminPolicy` 授予建立和管理所有 Kubernetes 資源的廣泛許可，包括跨所有命名空間建立任何資源類型的能力。這對於開發和 POCs 來說很方便，但不應用於生產環境。對於生產，請建立自訂 RBAC 政策，僅授予 ResourceGraphDefinitions 將管理之特定資源所需的許可。如需設定最低權限許可的指引，請參閱 [設定 kro 許可](kro-permissions.md)和 [EKS 功能的安全考量](capabilities-security.md)。

## 步驟 5：確認自訂資源可用
<a name="_step_5_verify_custom_resources_are_available"></a>

功能處於作用中狀態後，請確認叢集中是否有可用的 kro 自訂資源：

```
kubectl api-resources | grep kro.run
```

您應該會看到列出的`ResourceGraphDefinition`資源類型。

## 後續步驟
<a name="_next_steps"></a>
+  [kro 概念](kro-concepts.md) - 了解 kro 概念和資源合成
+  [kro 概念](kro-concepts.md) - 了解 SimpleSchema、CEL 表達式和合成模式
+  [使用 功能資源](working-with-capabilities.md) - 管理您的 kro 功能資源

# 使用 eksctl 建立 kro 功能
<a name="kro-create-eksctl"></a>

本主題說明如何使用 eksctl 建立 kro (Kube Resource Orchestrator) 功能。

**注意**  
下列步驟需要 eksctl 版本 `0.220.0` 或更新版本。若要檢查您的版本，請執行 `eksctl version`。

## 步驟 1：建立 IAM 功能角色
<a name="_step_1_create_an_iam_capability_role"></a>

建立信任政策檔案：

```
cat > kro-trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "capabilities.eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}
EOF
```

建立 IAM 角色：

```
aws iam create-role \
  --role-name KROCapabilityRole \
  --assume-role-policy-document file://kro-trust-policy.json
```

**注意**  
與 ACK 和 Argo CD 不同， kro 不需要信任政策以外的其他 IAM 許可。 kro 完全在您的叢集內運作，而且不會進行 AWS API 呼叫。

## 步驟 2：建立 kro 功能
<a name="_step_2_create_the_kro_capability"></a>

使用 eksctl 建立 kro 功能。將 *region-code* 取代為您的叢集所在的 AWS 區域，並將 *my-cluster* 取代為您的叢集名稱。

```
eksctl create capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro \
  --type KRO \
  --role-arn arn:aws:iam::[.replaceable]111122223333:role/KROCapabilityRole
```

命令會立即傳回，但 功能需要一些時間才會變成作用中。

## 步驟 3：確認功能處於作用中狀態
<a name="_step_3_verify_the_capability_is_active"></a>

檢查功能狀態。將 *region-code* 取代為您的叢集所在的 AWS 區域，並將 *my-cluster* 取代為您的叢集名稱。

```
eksctl get capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro
```

當狀態顯示 時，此功能已就緒`ACTIVE`。

## 步驟 4：授予管理 Kubernetes 資源的許可
<a name="_step_4_grant_permissions_to_manage_kubernetes_resources"></a>

根據預設，kro 只能建立和管理 ResourceGraphDefinitions 及其執行個體。若要允許 kro 建立和管理 ResourceGraphDefinitions 中定義的基礎 Kubernetes 資源，請將`AmazonEKSClusterAdminPolicy`存取政策與功能的存取項目建立關聯。

取得功能角色 ARN：

```
CAPABILITY_ROLE_ARN=$(aws eks describe-capability \
  --region region-code \
  --cluster my-cluster \
  --name my-kro \
  --query 'capability.roleArn' \
  --output text)
```

關聯叢集管理員政策：

```
aws eks associate-access-policy \
  --region region-code \
  --cluster my-cluster \
  --principal-arn $CAPABILITY_ROLE_ARN \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster
```

**重要**  
`AmazonEKSClusterAdminPolicy` 授予建立和管理所有 Kubernetes 資源的廣泛許可，旨在簡化入門。對於生產用途，請建立更嚴格的 RBAC 政策，僅授予 ResourceGraphDefinitions 將管理之特定資源所需的許可。如需設定最低權限許可的指引，請參閱 [設定 kro 許可](kro-permissions.md)和 [EKS 功能的安全考量](capabilities-security.md)。

## 步驟 5：確認可用的自訂資源
<a name="_step_5_verify_custom_resources_are_available"></a>

功能處於作用中狀態後，請確認叢集中是否有可用的 kro 自訂資源：

```
kubectl api-resources | grep kro.run
```

您應該會看到列出的`ResourceGraphDefinition`資源類型。

## 後續步驟
<a name="_next_steps"></a>
+  [kro 概念](kro-concepts.md) - 了解 kro 概念和資源組成
+  [kro 概念](kro-concepts.md) - 了解 SimpleSchema、CEL 表達式和合成模式
+  [使用 功能資源](working-with-capabilities.md) - 管理您的 kro 功能資源