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

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

创建kubeconfigAmazon EKS 上的

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

本节提供两个用于创建或更新 kubeconfig 的过程。您可以使用AmazonCLIupdate-kubeconfig命令自动使用AmazonCLI,或者您可以使用AmazonCLI 或aws-iam-authenticator

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

aws sts get-caller-identity

有关更多信息,请参阅 。配置AmazonCLI中的Amazon命令行界面用户指南

自动创建 kubeconfig

创建kubeconfig文件中的AmazonCLI

  1. 确保您有 1.16.156 或更高版本的AmazonCLI 已安装。安装或升级AmazonCLI,请参阅安装AmazonCLI中的Amazon命令行界面用户指南

    注意

    系统的 Python 版本必须为 2.7.9 或更高版本。否则,您会收到hostname doesn't match带有的错误AmazonCLI 调用亚马逊 EKS。

    您可以检查您的AmazonCLI 版本,使用以下命令:

    aws --version
    重要

    包管理器,例如yumapt-get,或适用于 macOS 的自制软件通常比落后几个版本。AmazonCLI。要确保您有最新版本,请参阅安装AmazonCLI中的Amazon命令行界面用户指南

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

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

    • 您可以 ARN 用--role-arn选项,在发出kubectl命令。否则,默认的 IAM 实体AmazonCLI 或开发工具包凭证链使用。您可以查看默认AmazonCLI 或开发工具包标识,方法是运行aws sts get-caller-identity命令。

    • 有关更多信息,请参阅帮助页面aws eks update-kubeconfig help命令或请参阅更新-库贝肯图中的AmazonCLI 命令参考

    注意

    要运行以下命令,您必须具有对指定的集群使用 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 代码块之一复制到其中,具体取决于您的首选客户端令牌方法。

    • 使用AmazonCLIaws eks get-token命令(需要 1.16.156 或更高版本的AmazonCLI):

      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>"
    • 使用Amazon适用于库贝内特人的 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 角色以执行集群操作(而不是默认的)Amazon凭据提供程序链中,取消注释-r或者--role<role-arn>行并替换 IAM 角色 ARN 以与您的用户一起使用。

  7. (可选)要始终使用特定的名为Amazon凭据配置文件(而不是默认Amazon凭据提供程序链),请取消注释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