为 Amazon EKS 创建 kubeconfig - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

为 Amazon EKS 创建 kubeconfig

在本节中,将为集群创建一个 kubeconfig 文件(或更新现有文件)。

本节提供两个用于创建或更新 kubeconfig 文件的过程。您可以使用 Amazon CLI,通过 Amazon CLI update-kubeconfig 命令快速自动创建或更新 kubeconfig 文件,或者您可以使用 Amazon CLI 或 aws-iam-authenticator 手动创建 kubeconfig 文件。

Amazon EKS 使用 Amazon CLI 的版本 1.16.156 或更高版本中提供的 aws eks get-token 命令或者适用于 Kubernetes 的 Amazon IAM 身份验证器借助 kubectl 进行集群身份验证。如果您的系统上已经安装了 Amazon CLI,则预设情况下, Amazon IAM Authenticator for Kubernetes 使用以下命令返回的相同凭据:

aws sts get-caller-identity

有关更多信息,请参阅《Amazon Command Line Interface 用户指南》中的配置 Amazon CLI

自动创建 kubeconfig 文件

使用 kubeconfig 创建 Amazon CLI

  1. 确保您已安装 Amazon CLI 的版本 1.16.156 或更高版本。要安装或升级 Amazon CLI,请参阅 Amazon Command Line Interface 用户指南中的安装 Amazon CLI

    注意

    系统的 Python 版本必须为 2.7.9 或更高版本。否则,在 Amazon CLI 调用 Amazon EKS 时会收到 hostname doesn't match 错误。

    可以使用以下命令来查看您的 Amazon CLI 版本:

    aws --version
    重要

    软件包管理器(例如 yumapt-get 或适用于 macOS 的 Homebrew)通常比 Amazon CLI 落后几个版本。要确保您使用的是最新版本,请参阅 Amazon Command Line Interface 用户指南中的安装 Amazon CLI

  2. 为集群创建或更新 kubeconfig 文件。将示例值替换为您自己的值。

    • 预设情况下,在主目录的原定设置 kubeconfig 路径 (.kube/config) 中创建得到的配置文件,或者或与该位置的现有 kubeconfig 合并。您可以使用 --kubeconfig 选项指定其他路径。

    • 发出 kubectl 命令时,可以使用 --role-arn 选项指定 IAM 角色 ARN 供身份验证使用。否则,将使用默认 Amazon CLI 或开发工具包凭证链中的 IAM 实体。通过运行 Amazon CLI 命令可以查看默认 aws sts get-caller-identity 或开发工具包标识。

    • 有关更多信息,请使用 aws eks update-kubeconfig help 命令参阅帮助页面,或参阅 Amazon CLI 命令参考中的 update-kubeconfig

    注意

    要运行以下命令,您必须具有对指定的集群使用 eks:DescribeCluster API 操作的权限。有关更多信息,请参阅 Amazon EKS 基于身份的策略示例

    aws eks update-kubeconfig --region region-code --name cluster-name
  3. 测试配置。

    kubectl get svc
    注意

    如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未经授权或访问被拒绝 (kubectl)

    输出:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m

手动创建 kubeconfig

手动创建 kubeconfig 文件

  1. 检索集群的端点。将示例值替换为集群的值。

    aws eks describe-cluster \ --region region-code \ --name my-cluster \ --query "cluster.endpoint" \ --output text

    输出

    https://E0EED553387FD639757D97A76EXAMPLE.gr7.region-code.eks.amazonaws.com.cn
  2. 检索与集群通信所需的 Base64 编码证书数据。

    aws eks describe-cluster \ --region region-code \ --name my-cluster \ --query "cluster.certificateAuthority.data" \ --output text

    输出是一个非常长的字符串。

  3. 如果默认 ~/.kube 目录尚不存在,请创建它。

    mkdir -p ~/.kube
  4. 使用文本编辑器复制以下代码块之一的内容(具体取决于您的首选客户端令牌方法)。

    • 使用 Amazon CLI aws eks get-token 命令(需要 1.16.156 或更高版本的 Amazon CLI)。

      apiVersion: v1 clusters: - cluster: server: endpoint certificate-authority-data: certificate-data name: kubernetes contexts: - context: cluster: kubernetes user: aws name: aws current-context: aws kind: Config preferences: {} users: - name: aws user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 command: aws args: - "eks" - "get-token" - "--cluster-name" - "cluster-name" # - "--role-arn" # - "role-arn" # env: # - name: AWS_PROFILE # value: "aws-profile"
    • 要使用适用于 Kubernetes 的 Amazon IAM 身份验证器,请执行以下操作:

      apiVersion: v1 clusters: - cluster: server: endpoint certificate-authority-data: certificate-data name: kubernetes contexts: - context: cluster: kubernetes user: aws name: aws current-context: aws kind: Config preferences: {} users: - name: aws user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 command: aws-iam-authenticator args: - "token" - "-i" - "cluster-name" # - "-r" # - "role-arn" # env: # - name: AWS_PROFILE # value: "aws-profile"
  5. 端点替换为上一步获得的端点。

  6. certificate-data 替换为上一步中获得的 Base64 编码的证书数据。

  7. cluster-name 替换为集群名称。

  8. (可选)要代入 IAM 角色以执行集群操作(而不是默认 Amazon 凭据提供程序链),请取消注释 -rrole-arn 行,并替换为 IAM 角色 ARN 以将其用于您的用户。

  9. 使用您的集群名称作为文件名将该文件保存到默认 kubectl 文件夹。例如,如果集群名称为 my-cluster,则将该文件保存到 ~/.kube/config-my-cluster

  10. 将该文件路径添加到 KUBECONFIG 环境变量,以便 kubectl 了解在哪里查找集群配置。

    • 对于 macOS 或 Linux 上的 Bash shell:

      export KUBECONFIG=$KUBECONFIG:~/.kube/config-my-cluster
    • 对于 Windows 上的 PowerShell:

      $ENV:KUBECONFIG="{0};{1}" -f $ENV:KUBECONFIG, "$ENV:userprofile\.kube\config-my-cluster"
  11. (可选) 将配置添加到您的 shell 初始化文件,以便在打开 shell 时对其进行配置。

    • 对于 macOS 上的 Bash shell:

      echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config-my-cluster' >> ~/.bash_profile
    • 对于 Linux 上的 Bash shell:

      echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config-my-cluster' >> ~/.bashrc
    • 对于 Windows 上的 PowerShell:

      [System.Environment]::SetEnvironmentVariable('KUBECONFIG', $ENV:KUBECONFIG, 'Machine')
  12. 测试配置。

    kubectl get svc
    注意

    如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未经授权或访问被拒绝 (kubectl)

    输出:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m