为 Amazon EKS 集群创建或更新 kubeconfig 文件
在本主题中,您将为您的集群创建 kubeconfig 文件(或更新现有文件)。
kubectl 命令行工具使用 kubeconfig 文件中的配置信息与集群的 API 服务器通信。有关更多信息,请参阅 Kubernetes 文档中的 Organizing Cluster Access Using kubeconfig Fileskubeconfig 文件:
-
使用 Amazon CLI
update-kubeconfig命令自动创建该文件。 -
使用 Amazon CLI 或
aws-iam-authenticator手动创建该文件。
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 EKS 集群。要部署一个角色,请参阅 开始使用 Amazon EKS。
您的设备或 Amazon CloudShell 上安装了
kubectl命令行工具。该版本可以与集群的 Kubernetes 版本相同,或者最多早于或晚于该版本一个次要版本。例如,如果您的集群版本为1.24,则可以将kubectl的1.23、1.24或1.25版本与之配合使用。要安装或升级kubectl,请参阅 安装或更新 kubectl。
自动创建 kubeconfig 文件
先决条件
您的设备或 Amazon CloudShell 上安装并配置了
2.11.3版或更高版本,或1.27.93版或更高版本的 Amazon CLI。您可以使用aws --version | cut -d / -f2 | cut -d ' ' -f1检查您的当前版本。软件包管理器(如yum、apt-get或适用于 macOS 的 Homebrew)通常比 Amazon CLI 的最新版本落后几个版本。要安装最新版本,请参阅《Amazon Command Line Interface 用户指南》中的安装、更新和卸载 Amazon CLI 和使用aws configure进行快速配置。Amazon CloudShell 中安装的 Amazon CLI 版本也可能比最新版本落后几个版本。要对其进行更新,请参阅《Amazon CloudShell 用户指南》中的将 Amazon CLI 安装到您的主目录。将
eks:DescribeClusterAPI 操作用于您指定的集群的权限。有关更多信息,请参阅Amazon EKS 基于身份的策略示例。
使用 Amazon CLI 创建 kubeconfig
-
为集群创建或更新
kubeconfig文件。将region-code替换为您的集群所在的 Amazon Web Services 区域,并将my-cluster替换为您的集群的名称。aws eks update-kubeconfig --regionregion-code--namemy-cluster预设情况下,在主目录的原定设置
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。 -
测试配置。
kubectl get svc输出示例如下。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m如果您收到任何授权或资源类型错误,请参阅故障排除主题中的 未经授权或访问被拒绝 (kubectl)。
手动创建 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输出示例如下。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m如果您收到任何授权或资源类型错误,请参阅故障排除主题中的 未经授权或访问被拒绝 (kubectl)。