创建kubeconfigAmazon EKS - Amazon EKS

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

创建kubeconfigAmazon EKS

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

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

Amazon EKS 使用aws eks get-token命令,可在 1.16.156 或更高版本的AWS CLI或AWS适用于库贝内特人的 IAM 身份验证器替换为kubectl进行集群身份验证。如果您已安装AWS CLI,那么默认情况下AWS适用于 Kubernetes 的 IAM 身份验证器将使用随以下命令返回的相同凭证:

aws sts get-caller-identity

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

自动创建 kubeconfig

使用 AWS CLI 创建 kubeconfig

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

    注意

    系统的 Python 版本必须为 2.7.9 或更高版本。否则,您会收到hostname doesn't match出现的错误AWS CLI呼叫亚马逊 EKS。

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

    aws --version
    重要

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

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

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

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

    • 有关更多信息,请参阅帮助页面,其中包含aws eks update-kubeconfig help命令或请参阅更新中的AWS CLI命令参考

    注意

    要运行以下命令,您必须具有使用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-arn" # - "<role-arn>" # env: # - name: AWS_PROFILE # value: "<aws-profile>"
    • 使用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