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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为 Amazon EKS 创建 kubeconfig

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

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

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

aws sts get-caller-identity

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

自动创建 kubeconfig

使用 AWS CLI 创建 kubeconfig

  1. 确保您已安装 AWS CLI 的版本 1.16.156 或更高版本。要安装或升级 AWS CLI,请参阅 https://docs.amazonaws.cn/cli/latest/userguide/cli-chap-install.html 中的AWS Command Line Interface 用户指南安装 AWS 命令行界面

    注意

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

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

    aws --version
    重要

    程序包管理器(如 yumapt-get 或适用于 macOS 的 Homebrew)通常位于 AWS CLI 的多个版本之后。要确保您具有最新版本,请参阅 https://docs.amazonaws.cn/cli/latest/userguide/cli-chap-install.html 中的安装 AWS 命令行界面AWS Command Line Interface 用户指南。

  2. 使用 AWS CLI update-kubeconfig 命令为您的集群创建或更新 kubeconfig。

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

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

    • 有关更多信息,请参阅包含 aws eks update-kubeconfig help 命令的帮助页面,或参阅 https://docs.amazonaws.cn/cli/latest/reference/eks/update-kubeconfig.html 中的 update-kubeconfigAWS CLI Command Reference。

    注意

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

    aws eks --region <region-code> update-kubeconfig --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. 如果默认 ~/.kube 目录尚不存在,请创建它。

    mkdir -p ~/.kube
  2. 打开您常用的文本编辑器并将以下 kubeconfig 代码块之一复制到其中,具体取决于您的首选客户端令牌方法。

    • 要使用 AWS CLI aws eks get-token 命令(需要 1.16.156 的版本 AWS CLI 或更高版本),请执行以下操作:

      apiVersion: v1 clusters: - cluster: server: <endpoint-url> certificate-authority-data: <base64-encoded-ca-cert> 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" # - "<role-arn>" # env: # - name: AWS_PROFILE # value: "<aws-profile>"
    • 使用适用于 Kubernetes 的 AWS IAM 身份验证器

      apiVersion: v1 clusters: - cluster: server: <endpoint-url> certificate-authority-data: <base64-encoded-ca-cert> 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>"
  3. <endpoint-url> 替换为为您的集群创建的终端节点 URL。

  4. <base64-encoded-ca-cert> 替换为为您的集群创建的 certificateAuthority.data

  5. <cluster-name> 替换为您的集群名称。

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

  7. (可选)要始终使用指定的特定 AWS 凭证配置文件(而不是默认 AWS 凭证提供程序链),请取消注释 env 行并将 <aws-profile> 替换为要使用的配置文件名称。

  8. 将该文件保存到默认 kubectl 文件夹,并在文件名中包含您的集群名称。例如,如果您的集群名称为 <devel>,请将该文件保存到 ~/.kube/config-<devel>

  9. 将该文件路径添加到 KUBECONFIG 环境变量,以便 kubectl 知道查找集群配置的位置。

    • 对于 macOS 或 Linux 上的 Bash shell:

      export KUBECONFIG=$KUBECONFIG:~/.kube/config-<devel>
    • 对于 Windows 上的 PowerShell:

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

    • 对于 macOS 上的 Bash shell:

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

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

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

    kubectl get svc
    注意

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

    输出:

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