

 **帮助改进此页面** 

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

# 为集群创建 IAM OIDC 提供商
<a name="enable-iam-roles-for-service-accounts"></a>

您的集群具有与其关联的 [OpenID Connect](https://openid.net/connect/)（OIDC）发布者 URL。要将 Amazon Identity and Access Management（IAM）角色用于服务账户，您集群的 OIDC 发布者 URL 必须存在 IAM OIDC 提供者。

## 先决条件
<a name="_prerequisites"></a>
+ 现有 Amazon EKS 集群。要部署一个角色，请参阅[开始使用 Amazon EKS](getting-started.md)。
+ 在您的设备或 Amazon CloudShell 上安装和配置 Amazon 命令行界面（Amazon CLI）的版本 `2.12.3` 或更高版本，或版本 `1.27.160` 或更高版本。要查看当前版本，请使用 `aws --version | cut -d / -f2 | cut -d ' ' -f1`。`yum`、`apt-get` 或适用于 macOS 的 Homebrew 等软件包管理器通常比 Amazon CLI 的最新版本落后几个版本。要安装最新版本，请参阅《Amazon 命令行界面用户指南》**中的[安装](https://docs.amazonaws.cn/cli/latest/userguide/cli-chap-install.html)和[使用 aws configure 快速配置](https://docs.amazonaws.cn/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)。Amazon CloudShell 中安装的 Amazon CLI 版本也可能比最新版本落后几个版本。要对其进行更新，请参阅《Amazon CloudShell 用户指南》**中的[将 Amazon CLI 安装到您的主目录](https://docs.amazonaws.cn/cloudshell/latest/userguide/vm-specs.html#install-cli-software)。
+ 您的设备或 Amazon CloudShell 上安装了 `kubectl` 命令行工具。该版本可以与集群的 Kubernetes 版本相同，或者最多早于或晚于该版本一个次要版本。例如，如果您的集群版本为 `1.29`，则可以将 `kubectl` 的 `1.28`、`1.29` 或 `1.30` 版本与之配合使用。要安装或升级 `kubectl`，请参阅 [设置 `kubectl` 和 `eksctl`](install-kubectl.md)。
+ 包含集群配置的现有 `kubectl` `config` 文件。要创建 `kubectl` `config` 文件，请参阅 [通过创建 kubeconfig 文件将 kubectl 连接到 EKS 集群](create-kubeconfig.md)。

您可以使用 `eksctl` 或 Amazon Web Services 管理控制台为集群创建 IAM OIDC 提供者。

## 创建 OIDC 提供者（eksctl）
<a name="_create_oidc_provider_eksctl"></a>

1. 您的设备或 Amazon CloudShell 上安装 `0.215.0` 版或更高版本的 `eksctl` 命令行工具。要安装或更新 `eksctl`，请参阅 `eksctl` 文档中的 [Installation](https://eksctl.io/installation)。

1. 确定集群的 OIDC 发布者 ID。

   检索集群的 OIDC 发布者 ID 并将其存储在变量中。将 `<my-cluster>` 替换为您自己的值。

   ```
   cluster_name=<my-cluster>
   oidc_id=$(aws eks describe-cluster --name $cluster_name --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)
   echo $oidc_id
   ```

1. 确定账户中是否已存在具有集群发布者 ID 的 IAM OIDC 提供者。

   ```
   aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
   ```

   如果返回了输出，则表示集群已经有 IAM OIDC 提供者，您可以跳过下一步。如果没有返回输出，则您必须为集群创建 IAM OIDC 提供者。

1. 使用以下命令为您的集群创建 IAM OIDC 身份提供商。

   ```
   eksctl utils associate-iam-oidc-provider --cluster $cluster_name --approve
   ```
**注意**  
如果启用了 EKS VPC 端点，则无法从该 VPC 内部访问 EKS OIDC 服务端点。因此，您在 VPC 中使用 `eksctl` 创建 OIDC 提供者等操作将不起作用，并将导致超时。错误消息示例如下：  

   ```
   ** server cant find oidc.eks.<region-code>.amazonaws.com: NXDOMAIN
   ```

   要完成此步骤，您可以在 VPC 外部运行该命令，例如在 Amazon CloudShell 中或在连接到互联网的计算机上。您也可在 VPC 中创建水平分割条件解析器（例如 Route 53 Resolver），以便为 OIDC 发布者 URL 使用不同的解析器，而不对其使用 VPC DNS。有关 CoreDNS 中条件转发的示例，请参阅 GitHub 上的 [Amazon EKS feature request](https://github.com/aws/containers-roadmap/issues/2038)。

## 创建 OIDC 提供者（Amazon 控制台）
<a name="create_oidc_provider_shared_aws_console"></a>

1. 打开 [Amazon EKS 控制台](https://console.amazonaws.cn/eks/home#/clusters)。

1. 在左侧窗格中，选择 **Clusters**（集群），然后在 **Clusters**（集群）页面上选择集群的名称。

1. 在 **Overview**（概述）选项卡上的 **Details**（详细信息）部分中，记下 **OpenID Connect provider URL**（OpenID Connect 提供商 URL）的值。

1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

1. 请在左侧导航窗格中，选择 **Access management**（访问管理）下方的 **Identity Providers**（标识提供程序）。如果列出的 **Provider（提供商）**与集群的 URL 匹配，那么您的集群已经有了提供商。如果未列出与集群 URL 匹配的提供者，则必须创建一个提提供者。

1. 要创建提供商，请选择 **Add Provider**（添加提供商）。

1. 对于**提供者类型**，选择 **OpenID Connect**。

1. 对于**提供者 URL**，输入集群的 OIDC 提供者 URL。

1. 对于**受众**,，输入 `sts.amazonaws.com`。

1. （可选）添加任何标签，例如用于标识哪个集群用于该提供商的标签。

1. 选择**添加提供程序**。

下一步: [为 Kubernetes 服务账户分配 IAM 角色](associate-service-account-role.md) 