为 Amazon EKS 集群创建或更新 kubeconfig
文件
在本主题中,您将为您的集群创建 kubeconfig
文件(或更新现有文件)。
kubectl
命令行工具使用 kubeconfig
文件中的配置信息与集群的 API 服务器通信。有关更多信息,请参阅 Kubernetes 文档中的 Organizing Cluster Access Using kubeconfig Fileskubeconfig
文件:
-
使用 AWS CLI
update-kubeconfig
命令自动创建该文件。 -
使用 AWS CLI 或
aws-iam-authenticator
手动创建该文件。
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
先决条件
现有 Amazon EKS 集群。要部署一个角色,请参阅 开始使用 Amazon EKS。
您的设备或 AWS CloudShell 上安装了
kubectl
命令行工具。该版本可以与集群的 Kubernetes 版本相同,或者最多早于或晚于该版本一个次要版本。例如,如果您的集群版本为1.26
,则可以将kubectl
的1.25
、1.26
或1.27
版本与之配合使用。要安装或升级kubectl
,请参阅 安装或更新 kubectl。
自动创建 kubeconfig
文件
先决条件
您的设备或 AWS CloudShell 上安装并配置了
2.12.3
版或更高版本,或1.27.160
版或更高版本的 AWS CLI。您可以使用aws --version | cut -d / -f2 | cut -d ' ' -f1
检查您的当前版本。软件包管理器(如yum
、apt-get
或适用于 macOS 的 Homebrew)通常比 AWS CLI 的最新版本落后几个版本。要安装最新版本,请参阅《AWS Command Line Interface 用户指南》中的安装、更新和卸载 AWS CLI 和使用aws configure
进行快速配置。AWS CloudShell 中安装的 AWS CLI 版本也可能比最新版本落后几个版本。要对其进行更新,请参阅《AWS CloudShell 用户指南》中的将 AWS CLI 安装到您的主目录。将
eks:DescribeCluster
API 操作用于您指定的集群的权限。有关更多信息,请参阅Amazon EKS 基于身份的策略示例。
使用 AWS CLI 创建 kubeconfig
-
为集群创建或更新
kubeconfig
文件。将region-code
替换为您的集群所在的 AWS 区域,并将my-cluster
替换为您的集群的名称。aws eks update-kubeconfig --region
region-code
--namemy-cluster
预设情况下,在主目录的原定设置
kubeconfig
路径 (.kube
) 中创建得到的配置文件,或者或与该位置的现有config
合并。您可以使用--kubeconfig
选项指定其他路径。发出
kubectl
命令时,可以使用--role-arn
选项指定 IAM 角色 ARN 供身份验证使用。否则,将使用默认 AWS CLI 或开发工具包凭证链中的 IAM 主体。通过运行aws sts get-caller-identity
命令可以查看默认 AWS CLI 或开发工具包标识。对于所有可用选项,运行
aws eks update-kubeconfig help
命令,或请参阅《AWS 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 values
export region_code=
region-code
export cluster_name=my-cluster
export 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
-
为您的首选客户端令牌方法运行以下命令之一(AWS CLI 或适用于 Kubernetes 的 AWS IAM 身份验证器),以在
~/.kube
目录中创建config
文件。在运行其中一个命令之前,可以通过修改命令以包含以下选项来指定以下内容:-
IAM 角色 – 删除
args:
下的行开头的#
。将
替换为您想要使用其执行集群操作的 IAM 角色的名称而不是默认的 AWS 凭证提供程序链。有关更多信息,请参阅 GitHub 上的设置my-role
kubectl
以使用适用于 Kubernetes 的 AWS IAM 身份验证器提供的身份验证令牌。 -
AWS CLI 命名配置文件 – 删除
env:
行开头的#
,然后删除其下的行开头的#
。将
替换为要使用的配置文件的名称。如果未指定配置文件,系统会使用默认配置文件。有关其他信息,请参阅 GitHub 上的指定凭证并使用 AWS 配置文件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)。