

 **帮助改进此页面** 

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

# 适用于 Argo CD 的 EKS 功能与自主管理型 Argo CD 的比较
<a name="argocd-comparison"></a>

适用于 Argo CD 的 EKS 功能提供了在 EKS 中运行的完全托管的 Argo CD。有关 EKS 功能与自主管理型解决方案的总体比较，请参阅 [EKS 功能和注意事项](capabilities-considerations.md)。本主题将重点介绍 Argo CD 特有的差异，包括身份验证、多集群管理及上游功能支持。

## 与上游 Argo CD 的区别
<a name="_differences_from_upstream_argo_cd"></a>

适用于 Argo CD 的 EKS 功能基于上游 Argo CD，但在访问方式、配置以及与 Amazon 服务的集成方面有所不同。

 **RBAC 和身份验证**：该功能附带三个 RBAC 角色（管理员、编辑者和查看者），并使用 Amazon Identity Center 进行身份验证，而不是 Argo CD 的内置身份验证。通过该功能的 `rbacRoleMapping` 参数配置角色映射，以将 Identity Center 组映射到 Argo CD 角色，而不是通过 Argo CD 的 `argocd-rbac-cm` ConfigMap 进行配置。Argo CD 用户界面通过其自身的直接 URL 托管（可在 EKS 控制台中集群的“功能”选项卡下找到），API 访问则通过 IAM 使用 Amazon 身份验证和授权。

 **集群配置**：该功能不会自动配置本地集群或轴辐式拓扑。您需要自行配置部署目标集群和 EKS 访问条目。该功能仅支持将 Amazon EKS 集群作为部署目标，且必须使用 EKS 集群 ARN（而非 Kubernetes API 服务器 URL）。该功能不会自动将本地集群 (`kubernetes.default.svc`) 添加为部署目标，若要部署到创建该功能的同一集群，请使用其 ARN 明确注册该集群。

 **简化的远程集群访问**：该功能使用 EKS 访问条目来授予 Argo CD 远程集群访问权限，从而简化了多集群部署，无需配置服务账户的 IAM 角色（IRSA）或设置跨账户 IAM 角色代入。该功能还支持对完全私有的 EKS 集群进行透明访问，无需进行 VPC 对等连接或专门的网络配置，Amazon 会自动管理 Argo CD 功能与私有远程集群之间的连接。

 **直接的 Amazon 服务集成**：该功能通过功能角色的 IAM 权限，提供与 Amazon 服务的直接集成。您可以直接在 Application 资源中引用 CodeCommit 存储库、ECR Helm 图表和 CodeConnections，而无需创建存储库配置。这简化了身份验证，无需为 Amazon 服务管理单独的凭证。有关详细信息，请参阅 [配置存储库访问权限](argocd-configure-repositories.md)。

 **命名空间支持**：该功能要求您指定一个单一命名空间，在该命名空间内必须创建 Argo CD 应用程序、ApplicationSet 以及 AppProject 自定义资源。

**注意**  
此命名空间限制仅适用于 Argo CD 自己的自定义资源（应用程序、ApplicationSet、AppProject）。您的应用程序工作负载可以部署到任何目标集群中的任何命名空间中。例如，如果您使用命名空间 `argocd` 创建功能，则必须在 `argocd` 命名空间中创建所有应用程序 CR，但这些应用程序可以将工作负载部署到 `default`、`production`、`staging` 或任何其他命名空间。

**注意**  
托管功能对 CLI 的使用和 AppProject 配置有特定的要求：  
使用 Argo CD CLI 时，请使用命名空间前缀指定应用程序：`argocd app sync namespace/appname`
AppProject 资源必须指定 `.spec.sourceNamespaces`，以确定该项目可以监控应用程序的哪些命名空间（通常设置为您在创建功能时所指定的命名空间）
资源跟踪注释使用格式：`namespace_appname:group/kind:namespace/name`

 **不支持的功能**：托管功能中不提供以下功能：
+ 用于生成自定义清单的 Config 管理插件（CMP）
+ 用于资源运行状况评测的自定义 Lua 脚本（支持标准资源的内置运行状况检查）
+ 通知控制器
+ 自定义 SSO 提供者（仅支持 Amazon Identity Center，包括通过 Amazon Identity Center 提供的第三方联合身份）
+ 用户界面扩展和自定义横幅
+ 直接访问 `argocd-cm`、`argocd-params` 和其他配置 ConfigMaps
+ 修改同步超时（固定为 120 秒）

 **兼容性**：Applications 和 ApplicationSets 的工作方式与上游 Argo CD 完全相同，清单无需更改。该功能使用同一 Kubernetes API 和 CRD，因此 `kubectl` 等工具的使用方式将保持不变。该功能完全支持 Applications 和 ApplicationSets、带自动同步的 GitOps 工作流程、多集群部署、同步策略（自动化、修剪、自我修复）、同步波次和钩子、标准 Kubernetes 资源的运行状况评估、回滚功能、Git 存储库源（HTTPS 和 SSH）、Helm、Kustomize 和原生 YAML 清单、GitHub 应用程序凭证、用于多租户的项目，以及资源排除项和包含项。

## 将 Argo CD CLI 与托管功能结合使用
<a name="argocd-cli-configuration"></a>

对于大多数操作，Argo CD CLI 的工作方式与上游 Argo CD 相同，但身份验证和集群注册有所不同。

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

按照[上游安装说明](https://argo-cd.readthedocs.io/en/stable/cli_installation/)，安装 Argo CD CLI。

### 配置
<a name="_configuration"></a>

使用环境变量配置 CLI：

1. 从 EKS 控制台（在集群的**功能**选项卡下）或使用 Amazon CLI 获取 Argo CD 服务器 URL。必须移除 `https://` 前缀：

   ```
   export ARGOCD_SERVER=$(aws eks describe-capability \
     --cluster-name my-cluster \
     --capability-name my-argocd \
     --query 'capability.configuration.argoCd.serverUrl' \
     --output text \
     --region region-code | sed 's|^https://||')
   ```

1. 从 Argo CD 用户界面（**设置** → **账户** → **管理员** → **生成新令牌**）生成账户令牌，然后将其设置为环境变量：

   ```
   export ARGOCD_AUTH_TOKEN="your-token-here"
   ```

**重要**  
此配置使用管理员账户令牌进行初始设置和开发工作流程。对于生产使用案例，为遵循最低权限原则，请使用项目作用域内的角色和令牌。有关配置项目角色和 RBAC 的更多信息，请参阅[配置 Argo CD 权限](argocd-permissions.md)。

1. 设置必需的 gRPC 选项：

   ```
   export ARGOCD_OPTS="--grpc-web"
   ```

设置这些环境变量后，无需使用 `argocd login` 命令即可使用 Argo CD CLI。

### 主要区别
<a name="_key_differences"></a>

托管功能具有以下 CLI 限制：
+  不支持 `argocd admin` 命令 [这些命令需要直接访问容器组（pod）]
+  不支持 `argocd login`（改用账户或项目令牌）
+  `argocd cluster add` 需要 `--aws-cluster-name` 标志并指定 EKS 集群 ARN

### 示例：注册集群
<a name="_example_register_a_cluster"></a>

注册 EKS 集群以进行应用程序部署：

```
# Get the cluster ARN
CLUSTER_ARN=$(aws eks describe-cluster \
  --name my-cluster \
  --query 'cluster.arn' \
  --output text)

# Register the cluster
argocd cluster add $CLUSTER_ARN \
  --aws-cluster-name $CLUSTER_ARN \
  --name in-cluster \
  --project default
```

有关完整的 Argo CD CLI 文档，请参阅 [Argo CD CLI 参考](https://argo-cd.readthedocs.io/en/stable/user-guide/commands/argocd/)。

## 迁移路径
<a name="_migration_path"></a>

您可以从自主管理型 Argo CD 迁移到托管功能：

1. 检查当前的 Argo CD 配置中是否存在不支持的功能（通知控制器、CMP、自定义运行状况检查、UI 扩展）

1. 将自主管理的 Argo CD 控制器缩减到零副本以防止冲突

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

1. 导出现有的 Applications、ApplicationSets 和 AppProjects

1. 迁移存储库凭证、集群密钥和存储库凭证模板（repocreds）

1. 如果使用 GPG 密钥、TLS 证书或 SSH 已知主机，请同时迁移这些配置

1. 更新 `destination.server` 字段以使用集群名称或 EKS 集群 ARN

1. 将其应用于 Argo CD 托管实例

1. 验证应用程序是否正确同步

1. 停用自行管理型 Argo CD 安装

托管功能使用相同的 Argo CD API 和资源定义，因此只需最少的修改即可使用现有清单。

## 后续步骤
<a name="_next_steps"></a>
+  [创建 Argo CD 功能](create-argocd-capability.md)：创建 Argo CD 功能资源
+  [使用 Argo CD](working-with-argocd.md)：部署第一个应用程序
+  [Argo CD 注意事项](argocd-considerations.md)：配置 Amazon Identity Center 集成