为集群创建 IAM OIDC 提供商 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

为集群创建 IAM OIDC 提供商

您的集群具有与其关联的 OpenID Connect(OIDC)发布者 URL。要将 Amazon Identity and Access Management(IAM)角色用于服务账户,您的集群 OIDC 发布者 URL 必须存在 IAM OIDC 提供者。

  • 现有 Amazon EKS 集群。要部署一个角色,请参阅 开始使用 Amazon EKS

  • 在您的设备或 Amazon CloudShell 上安装和配置 Amazon 命令行界面(Amazon CLI)的版本 2.12.3 或更高版本,或版本 1.27.160 或更高版本。要查看当前版本,请使用 aws --version | cut -d / -f2 | cut -d ' ' -f1。软件包管理器(如 yumapt-get 或适用于 macOS 的 Homebrew)通常比 Amazon CLI 的最新版本落后几个版本。要安装最新版本,请参阅《Amazon 命令行界面用户指南》中的安装使用 aws configure 快速配置。Amazon CloudShell 中安装的 Amazon CLI 版本也可能比最新版本落后几个版本。要对其进行更新,请参阅《Amazon CloudShell 用户指南》中的将 Amazon CLI 安装到您的主目录

  • 您的设备或 Amazon CloudShell 上安装了 kubectl 命令行工具。该版本可以与集群的 Kubernetes 版本相同,或者最多早于或晚于该版本一个次要版本。例如,如果您的集群版本为 1.29,则可以将 kubectl1.281.291.30 版本与之配合使用。要安装或升级 kubectl,请参阅 设置 kubectl 和 eksctl

  • 包含集群配置的现有 kubectl config 文件。要创建 kubectl config 文件,请参阅 通过创建 kubeconfig 文件将 kubectl 连接到 EKS 集群

您可以使用 eksctl 或Amazon Web Services Management Console为集群创建 IAM OIDC 提供商。

创建 OIDC 供应者(eksctl)

  1. 您的设备或 Amazon CloudShell 上安装 0.190.0 版或更高版本的 eksctl 命令行工具。要安装或更新 eksctl,请参阅 eksctl 文档中的 Installation

  2. 确定您的集群的 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 提供商。

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

    eksctl utils associate-iam-oidc-provider --cluster $cluster_name --approve
    注意

    如果启用了 EKS VPC 端点,则无法从该 VPC 内部访问 EKS OIDC 服务端点。因此,您在 VPC 中使用 eksctl 创建 OIDC 提供商等操作将不起作用,并且在尝试请求 https://oidc.eks.region.amazonaws.com 时将导致超时。错误消息示例如下:

** server cant find oidc.eks.region.amazonaws.com: NXDOMAIN

要完成此步骤,您可以在 VPC 外部运行该命令,例如在 Amazon CloudShell 中或在连接到互联网的计算机上。您也可在 VPC 中创建水平分割条件解析器(例如 Route 53 Resolver),以便为 OIDC 颁发者 URL 使用不同的解析器,而不对其使用 VPC DNS。有关 CoreDNS 中条件转发的示例,请参阅 GitHub 上的 Amazon EKS feature request

创建 OIDC 提供者(Amazon 控制台)

  1. 打开 Amazon EKS console(Amazon EKS 控制台)

  2. 在左侧窗格中,选择 Clusters(集群),然后在 Clusters(集群)页面上选择集群的名称。

  3. Overview(概述)选项卡上的 Details(详细信息)部分中,记下 OpenID Connect provider URL(OpenID Connect 提供商 URL)的值。

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

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

  6. 要创建提供商,请选择 Add Provider(添加提供商)。

  7. 对于提供者类型,请选择 OpenID Connect

  8. 对于提供商 URL,输入您的集群的 OIDC 提供商 URL。

  9. 对于受众,,输入 sts.amazonaws.com

  10. (可选)添加任何标签,例如用于标识哪个集群用于该提供商的标签。

  11. 选择 Add provider(添加提供程序)。

下一步: 为 Kubernetes 服务账户分配 IAM 角色