

 **帮助改进此页面** 

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

# 创建 Argo CD 功能
<a name="create-argocd-capability"></a>

本主题旨在介绍如何在 Amazon EKS 集群上创建 Argo CD 功能。

## 先决条件
<a name="_prerequisites"></a>

创建 Argo CD 功能之前，确保满足以下条件：
+ 运行受支持 Kubernetes 版本的现有 Amazon EKS 集群（标准支持与扩展支持范围内的所有版本均适用）
+  **AWS Identity Center 已配置**：此为 Argo CD 身份验证所需（不支持本地用户）
+ 具有 Argo CD 操作权限的 IAM 功能角色
+ 可在 EKS 集群上创建功能资源的充足 IAM 权限
+  已配置 `kubectl` 以与集群通信
+ （可选）已安装 Argo CD CLI，以便更便捷地进行集群与存储库管理
+ （适用于 CLI/eksctl）已安装并配置相应 CLI 工具

有关如何创建 IAM 功能角色的说明，请参阅 [Amazon EKS 功能 IAM 角色](capability-role.md)。有关设置 Identity Center 的信息，请参阅 [AWS Identity Center 入门](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html)。

**重要**  
您提供的 IAM 功能角色，将决定 Argo CD 可以访问的 AWS 资源范围。这包括通过 CodeConnections 访问 Git 存储库，以及访问 Secrets Manager 中的密钥。有关创建具备最低权限的合适角色的操作指引，请参阅 [Amazon EKS 功能 IAM 角色](capability-role.md)和 [EKS 功能的安全注意事项](capabilities-security.md)。

## 选择工具
<a name="_choose_your_tool"></a>

您可以使用AWS 管理控制台、AWS CLI 或 eksctl 创建 Argo CD 功能：
+  [使用控制台创建 Argo CD 功能](argocd-create-console.md)：使用控制台获得引导式体验
+  [使用 AWS CLI 创建 Argo CD 功能](argocd-create-cli.md)：使用 AWS CLI 进行脚本编写和自动化
+  [使用 eksctl 创建 Argo CD 功能](argocd-create-eksctl.md)：使用 eksctl 获得 Kubernetes 原生体验

## 创建 Argo CD 功能时会执行的操作
<a name="_what_happens_when_you_create_an_argo_cd_capability"></a>

创建 Argo CD 功能时：

1. EKS 在 AWS 控制面板中创建 Argo CD 功能服务

1. 自定义资源定义（CRD）将被安装到集群中

1. 系统会自动为您的 IAM 功能角色创建一个访问条目，该条目带有特定于功能的访问条目策略，这些策略会授予基本的 Kubernetes 权限（请参阅 [EKS 功能的安全注意事项](capabilities-security.md)）

1. Argo CD 开始监视其自定义资源（应用程序、ApplicationSets、AppProjects）

1. 功能状态从 `CREATING` 更改为 `ACTIVE` 

1. 可通过对应的 URL 访问 Argo CD UI

功能进入运行状态后，即可在集群中创建 Argo CD 应用程序，以通过声明式源完成部署操作。

**注意**  
自动创建的访问条目不会授予将应用程序部署到集群的权限。要部署应用程序，您必须为每个目标集群配置额外的 Kubernetes RBAC 权限。有关注册集群和配置访问权限的详细信息，请参阅 [注册目标集群](argocd-register-clusters.md)。

## 后续步骤
<a name="_next_steps"></a>

创建 Argo CD 功能后：
+  [Argo CD 概念](argocd-concepts.md)：了解 GitOps 原则、同步策略及多集群模式
+  [使用 Argo CD](working-with-argocd.md)：配置存储库访问权限、注册目标集群及创建应用程序
+  [Argo CD 注意事项](argocd-considerations.md)：探索多集群架构模式及高级配置

# 使用控制台创建 Argo CD 功能
<a name="argocd-create-console"></a>

本主题将介绍如何使用 AWS 管理控制台创建 Argo CD 功能。

## 先决条件
<a name="_prerequisites"></a>
+  **已配置 AWS Identity Center**：Argo CD 需要使用 AWS Identity Center 进行身份验证。不支持本地用户。如果您尚未设置 AWS Identity Center，请参阅[开始使用 AWS Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) 以创建 Identity Center 实例，并参阅[添加用户](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html)和[添加组](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html)以创建用于访问 Argo CD 的用户和组。

## 创建 Argo CD 功能
<a name="_create_the_argo_cd_capability"></a>

1. 从以下位置打开 Amazon EKS 控制台：https://console.aws.amazon.com/eks/home\$1/clusters。

1. 选择集群名称，打开集群详细信息页面。

1. 选择**功能**选项卡。

1. 在左侧导航栏中，选择 **Argo CD**。

1. 选择**创建 Argo CD 功能**。

1. 对于 **IAM 功能角色**：
   + 如果已有 IAM 功能角色，请从下拉列表中选择该角色
   + 如需创建角色，请选择**创建 Argo CD 角色** 

     此操作会在新选项卡中打开 IAM 控制台，其中包含预填充的信任策略和 Secrets Manager 的完全读取权限。默认情况下不会添加其他权限，但您可以根据需要自行添加。如果计划使用 CodeCommit 存储库或其他 AWS 服务，请在创建角色之前添加相应的权限。

     创建角色后，返回 EKS 控制台，系统将自动选择该角色。
**注意**  
如果计划使用与 AWS Secrets Manager 或 AWS CodeConnections 的可选集成，则需要向该角色添加权限。有关 IAM 策略示例和配置指南，请参阅[使用 AWS Secrets Manager 管理应用程序密钥](integration-secrets-manager.md)和[使用 AWS CodeConnections 连接到 Git 存储库](integration-codeconnections.md)。

1. 配置 AWS Identity Center 集成：

   1. 选择**启用 AWS Identity Center 集成**。

   1. 从下拉列表中选择 Identity Center 实例。

   1. 通过将用户或组分配给 Argo CD 角色（ADMIN、EDITOR 或 VIEWER）来配置 RBAC 的角色映射

1. 选择**创建**。

功能创建过程随即开始。

## 验证功能是否处于活动状态
<a name="_verify_the_capability_is_active"></a>

1. 在**功能**选项卡上，查看 Argo CD 功能状态。

1. 等待状态从 `CREATING` 更改为 `ACTIVE`。

1. 变为活动状态后，该功能即可使用。

有关功能状态和问题排查的信息，请参阅[使用功能资源](working-with-capabilities.md)。

## 访问 Argo CD 用户界面
<a name="_access_the_argo_cd_ui"></a>

待该功能处于活动状态后，可以访问 Argo CD 用户界面：

1. 在 Argo CD 功能页面上，选择**打开 Argo CD 用户界面**。

1. Argo CD 用户界面将在新的浏览器选项卡中打开。

1. 现在，您可以通过用户界面创建应用程序和管理部署。

## 后续步骤
<a name="_next_steps"></a>
+  [使用 Argo CD](working-with-argocd.md)：配置存储库、注册集群和创建应用程序
+  [Argo CD 注意事项](argocd-considerations.md)：多集群架构和高级配置
+  [使用功能资源](working-with-capabilities.md)：管理 Argo CD 功能资源

# 使用 AWS CLI 创建 Argo CD 功能
<a name="argocd-create-cli"></a>

本主题将介绍如何使用 AWS CLI 创建 Argo CD 功能。

## 先决条件
<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)。
+  **已配置 AWS Identity Center**：Argo CD 需要使用 AWS Identity Center 进行身份验证。不支持本地用户。如果您尚未设置 AWS Identity Center，请参阅[开始使用 AWS Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) 以创建 Identity Center 实例，并参阅[添加用户](https://docs.aws.amazon.com/singlesignon/latest/userguide/addusers.html)和[添加组](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html)以创建用于访问 Argo CD 的用户和组。

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

创建信任策略文件：

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

**注意**  
如果计划使用与 AWS Secrets Manager 或 AWS CodeConnections 的可选集成，则需要向该角色添加权限。有关 IAM 策略示例和配置指南，请参阅[使用 AWS Secrets Manager 管理应用程序密钥](integration-secrets-manager.md)和[使用 AWS CodeConnections 连接到 Git 存储库](integration-codeconnections.md)。

## 步骤 2：创建 Argo CD 功能
<a name="_step_2_create_the_argo_cd_capability"></a>

在集群上创建 Argo CD 功能资源。

首先，为 Identity Center 配置设置环境变量：

```
# Get your Identity Center instance ARN (replace region if your IDC instance is in a different region)
export IDC_INSTANCE_ARN=$(aws sso-admin list-instances --region [.replaceable]`region` --query 'Instances[0].InstanceArn' --output text)

# Get a user ID for RBAC mapping (replace with your username and region if needed)
export IDC_USER_ID=$(aws identitystore list-users \
  --region [.replaceable]`region` \
  --identity-store-id $(aws sso-admin list-instances --region [.replaceable]`region` --query 'Instances[0].IdentityStoreId' --output text) \
  --query 'Users[?UserName==`your-username`].UserId' --output text)

echo "IDC_INSTANCE_ARN=$IDC_INSTANCE_ARN"
echo "IDC_USER_ID=$IDC_USER_ID"
```

创建集成了 Identity Center 的功能。将 *region-code* 替换为您的集群所在的 AWS 区域，将 *my-cluster* 替换为您的集群名称，将 *idc-region-code* 替换为您配置 IAM Identity Center 所在的区域代码：

```
aws eks create-capability \
  --region region-code \
  --cluster-name my-cluster \
  --capability-name my-argocd \
  --type ARGOCD \
  --role-arn arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):role/ArgoCDCapabilityRole \
  --delete-propagation-policy RETAIN \
  --configuration '{
    "argoCd": {
      "awsIdc": {
        "idcInstanceArn": "'$IDC_INSTANCE_ARN'",
        "idcRegion": "'[.replaceable]`idc-region-code`'"
      },
      "rbacRoleMappings": [{
        "role": "ADMIN",
        "identities": [{
          "id": "'$IDC_USER_ID'",
          "type": "SSO_USER"
        }]
      }]
    }
  }'
```

命令会立即返回，但是由于 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-argocd \
  --query 'capability.status' \
  --output text
```

当状态显示为 `ACTIVE` 时，表示功能已准备就绪。在该状态变为 `ACTIVE` 之前，请勿继续执行下一步。

您也可以查看完整功能详细信息：

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

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

待该功能处于活动状态后，验证 Argo CD 自定义资源是否已在集群中正常可用：

```
kubectl api-resources | grep argoproj.io
```

您应该会看到列出的 `Application` 和 `ApplicationSet` 资源类型。

## 后续步骤
<a name="_next_steps"></a>
+  [使用 Argo CD](working-with-argocd.md)：配置存储库、注册集群和创建应用程序
+  [Argo CD 注意事项](argocd-considerations.md)：多集群架构和高级配置
+  [使用功能资源](working-with-capabilities.md)：管理 Argo CD 功能资源

# 使用 eksctl 创建 Argo CD 功能
<a name="argocd-create-eksctl"></a>

本主题将介绍如何使用 eksctl 创建 Argo CD 功能。

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

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

创建信任策略文件：

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

**注意**  
对于此基本设置，无需其他 IAM 策略。如果计划使用 Secrets Manager 管理存储库凭证或使用 CodeConnections，则需为此角色添加相应权限。有关 IAM 策略示例和配置指南，请参阅[使用 AWS Secrets Manager 管理应用程序密钥](integration-secrets-manager.md)和[使用 AWS CodeConnections 连接到 Git 存储库](integration-codeconnections.md)。

## 步骤 2：获取 AWS Identity Center 配置
<a name="step_2_get_your_shared_aws_identity_center_configuration"></a>

获取 Identity Center 实例 ARN 和用户 ID，用于 RBAC 配置：

```
# Get your Identity Center instance ARN
aws sso-admin list-instances --query 'Instances[0].InstanceArn' --output text

# Get a user ID for admin access (replace 'your-username' with your Identity Center username)
aws identitystore list-users \
  --identity-store-id $(aws sso-admin list-instances --query 'Instances[0].IdentityStoreId' --output text) \
  --query 'Users[?UserName==`your-username`].UserId' --output text
```

记下这些值，下一步将会用到。

## 步骤 3：创建 eksctl 配置文件
<a name="_step_3_create_an_eksctl_configuration_file"></a>

使用以下内容创建名为 `argocd-capability.yaml` 的文件。将占位符值替换为集群名称、集群区域、IAM 角色 ARN、Identity Center 实例 ARN、Identity Center 区域和用户 ID：

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: my-cluster
  region: cluster-region-code

capabilities:
  - name: my-argocd
    type: ARGOCD
    roleArn: arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole
    deletePropagationPolicy: RETAIN
    configuration:
      argocd:
        awsIdc:
          idcInstanceArn: arn:aws:sso:::instance/ssoins-123abc
          idcRegion: idc-region-code
        rbacRoleMappings:
          - role: ADMIN
            identities:
              - id: 38414300-1041-708a-01af-5422d6091e34
                type: SSO_USER
```

**注意**  
您可以向 RBAC 映射添加多个用户或组。对于组，请使用 `type: SSO_GROUP` 并提供组 ID。可用角色包括 `ADMIN`、`EDITOR` 和 `VIEWER`。

## 步骤 4：创建 Argo CD 功能
<a name="_step_4_create_the_argo_cd_capability"></a>

应用配置文件：

```
eksctl create capability -f argocd-capability.yaml
```

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

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

检查功能状态。将 *region-code* 替换为您的集群所在的 AWS 区域，并将 *my-cluster* 替换为您的集群的名称。

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

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

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

待该功能处于活动状态后，验证 Argo CD 自定义资源是否已在集群中正常可用：

```
kubectl api-resources | grep argoproj.io
```

您应该会看到列出的 `Application` 和 `ApplicationSet` 资源类型。

## 后续步骤
<a name="_next_steps"></a>
+  [使用 Argo CD](working-with-argocd.md)：了解如何创建和管理 Argo CD 应用程序
+  [Argo CD 注意事项](argocd-considerations.md)：配置 SSO 和多集群访问权限
+  [使用功能资源](working-with-capabilities.md)：管理 Argo CD 功能资源