为 Amazon EKS 创建 kubeconfig
在本节中,将为集群创建一个 kubeconfig 文件(或更新现有文件)。
本节提供两个用于创建或更新 文件的过程。您可以使用 Amazon CLI,通过 Amazon CLI kubeconfigupdate-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,则默认情况下,适用于 Kubernetes 的 Amazon IAM 身份验证器使用以下命令返回的相同凭证:
aws sts get-caller-identity
有关更多信息,请参阅《Amazon Command Line Interface 用户指南》中的配置 Amazon CLI。
自动创建 kubeconfig 文件
使用 Amazon CLI 创建 kubeconfig
-
确保您已安装版本
1.25.46或2.7.21或更高版本。要安装或升级 Amazon CLI,请参阅 Amazon Command Line Interface 用户指南中的安装 Amazon CLI。注意 系统的 Python 版本必须为
2.7.9或更高版本。否则,在 Amazon CLI 调用 Amazon EKS 时会收到hostname doesn't match错误。可以使用以下命令来查看您的 Amazon CLI 版本:
aws --version重要 软件包管理器(例如
yum、apt-get或适用于 macOS 的 Homebrew)通常比 Amazon CLI 落后几个版本。要确保您使用的是最新版本,请参阅 Amazon Command Line Interface 用户指南中的安装 Amazon CLI。 -
为集群创建或更新
kubeconfig文件。将替换为您自己的值。example values-
预设情况下,在主目录的原定设置
kubeconfig路径 (.kube) 中创建得到的配置文件,或者或与该位置的现有config合并。您可以使用--kubeconfig选项指定其他路径。 -
发出
kubectl命令时,可以使用--role-arn选项指定 IAM 角色 ARN 供身份验证使用。否则,将使用默认 Amazon CLI 或开发工具包凭证链中的 IAM 实体。通过运行aws sts get-caller-identity命令可以查看默认 Amazon CLI 或开发工具包标识。 -
有关更多信息,请使用
aws eks update-kubeconfig help命令参阅帮助页面,或参阅 Amazon CLI 命令参考中的 update-kubeconfig。
注意 要运行以下命令,您必须具有对指定的集群使用
eks:DescribeClusterAPI 操作的权限。有关更多信息,请参阅Amazon EKS 基于身份的策略示例。aws eks update-kubeconfig --regionregion-code--namemy-cluster -
-
测试配置。
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 文件
-
通过将
替换为您自己的值,然后运行修改后的命令来设置几个变量的值。example valuesexport region_code=region-codeexport cluster_name=my-clusterexport account_id=111122223333 -
检索集群的端点并将值存储在变量中。
cluster_endpoint=$(aws eks describe-cluster \ --region $region_code \ --name $cluster_name \ --query "cluster.endpoint" \ --output text) -
检索与集群通信所需的 Base64 编码证书数据,并将值存储在变量中。
certificate_data=$(aws eks describe-cluster \ --region $region_code \ --name $cluster_name \ --query "cluster.certificateAuthority.data" \ --output text) -
如果默认
~/.kube目录尚不存在,请创建它。mkdir -p ~/.kube -
为您的首选客户端令牌方法运行命令(Amazon CLI 或适用于 Kubernetes 的 Amazon IAM 身份验证器)以在
~/.kube目录中创建config文件。在运行其中一个命令之前,可以通过修改命令以包含以下选项来指定以下内容:-
IAM 角色 – 删除
args:下的行开头的#。将替换为您想要使用其执行集群操作的 IAM 角色的名称而不是默认的 Amazon 凭证提供程序链。有关更多信息,请参阅 GitHub 上的设置my-rolekubectl以使用适用于 Kubernetes 的 Amazon IAM 身份验证器提供的身份验证令牌。 -
Amazon CLI 命名配置文件 – 删除
env:行开头的#,然后删除其下的行开头的#。将替换为要使用的配置文件的名称。如果未指定配置文件,系统会使用默认配置文件。有关其他信息,请参阅 GitHub 上的指定凭证并使用 Amazon 配置文件aws-profile。
-
-
将该文件路径添加到
KUBECONFIG环境变量,以便kubectl了解在哪里查找集群配置。-
对于 macOS 或 Linux 上的 Bash shell:
export KUBECONFIG=$KUBECONFIG:~/.kube/config -
对于 Windows 上的 PowerShell:
$ENV:KUBECONFIG="{0};{1}" -f $ENV:KUBECONFIG, "$ENV:userprofile\.kube\config"
-
-
(可选) 将配置添加到您的 shell 初始化文件,以便在打开 shell 时对其进行配置。
-
对于 macOS 上的 Bash shell:
echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config' >> ~/.bash_profile -
对于 Linux 上的 Bash shell:
echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config' >> ~/.bashrc -
对于 Windows 上的 PowerShell:
[System.Environment]::SetEnvironmentVariable('KUBECONFIG', $ENV:KUBECONFIG, 'Machine')
-
-
测试配置。
kubectl get svc注意 如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未经授权或访问被拒绝 (kubectl)。
输出示例如下。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m