

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 使用 eksctl 创建 ACK 功能
<a name="ack-create-eksctl"></a>

本主题将介绍如何使用 eksctl 创建 AWS Controllers for Kubernetes（ACK）功能。

**注意**  
以下步骤需要 eksctl 版本 `0.220.0` 或更高版本。要检查版本，请运行 `eksctl version`。

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

创建信任策略文件：

```
cat > ack-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 ACKCapabilityRole \
  --assume-role-policy-document file://ack-trust-policy.json
```

将 `AdministratorAccess` 托管式策略附加到角色：

```
aws iam attach-role-policy \
  --role-name ACKCapabilityRole \
  --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
```

**重要**  
建议的 `AdministratorAccess` 策略授予了广泛权限，旨在简化入门流程。对于生产用途，请将其替换为自定义策略，该策略仅授予您计划通过 ACK 管理的特定 AWS 服务所需的权限。有关创建最低权限策略的指导，请参阅[配置 ACK 权限](ack-permissions.md)和 [EKS 功能的安全注意事项](capabilities-security.md)。

**重要**  
此策略通过 `"Resource": "*"` 授予 S3 存储桶管理权限，允许对所有 S3 存储桶进行操作。  
用于生产用途：\$1 将 `Resource` 字段限制为特定的存储桶 ARN 或名称模式 \$1 使用 IAM 条件键通过资源标签限制访问权限 \$1 仅授予使用案例所需的最低权限  
有关其他 AWS 服务，请参阅[配置 ACK 权限](ack-permissions.md)。

将该策略附加到角色：

```
aws iam attach-role-policy \
  --role-name ACKCapabilityRole \
  --policy-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):policy/ACKS3Policy
```

## 步骤 2：创建 ACK 功能
<a name="_step_2_create_the_ack_capability"></a>

使用 eksctl 创建 ACK 功能。将 *region-code* 替换为您的集群所在的 AWS 区域，并将 *my-cluster* 替换为您的集群的名称。

```
eksctl create capability \
  --cluster [.replaceable]`my-cluster` \
  --region [.replaceable]`region-code` \
  --name ack \
  --type ACK \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ACKCapabilityRole \
  --ack-service-controllers s3
```

**注意**  
`--ack-service-controllers` 标记是可选的。如果省略，ACK 将启用所有可用的控制器。为了获得更好的性能和安全性，请考虑仅启用所需的控制器。您可以指定多个控制器，例如：`--ack-service-controllers s3,rds,dynamodb`

命令会立即返回，但该功能需要一些时间才能变为活动状态。

## 步骤 3：验证功能是否处于活动状态
<a name="_step_3_verify_the_capability_is_active"></a>

检查功能状态：

```
eksctl get capability \
  --cluster [.replaceable]`my-cluster` \
  --region [.replaceable]`region-code` \
  --name ack
```

当状态显示为 `ACTIVE` 时，表示功能已准备就绪。

## 步骤 4：验证自定义资源是否可用
<a name="_step_4_verify_custom_resources_are_available"></a>

功能激活后，验证 ACK 自定义资源是否已在集群中可用：

```
kubectl api-resources | grep services.k8s.aws
```

您应该会看到列出的多个用于 AWS 资源的 API。

**注意**  
AWS Controllers for Kubernetes 功能将为各种 AWS 资源安装大量 CRD。

## 后续步骤
<a name="_next_steps"></a>
+  [ACK 概念](ack-concepts.md)：了解 ACK 概念并开始使用
+  [配置 ACK 权限](ack-permissions.md)：为其他 AWS 服务配置 IAM 权限
+  [使用功能资源](working-with-capabilities.md)：管理 ACK 功能资源