为 Amazon EKS 创建 kubeconfig
在本节中,将为集群创建一个 kubeconfig
文件(或更新现有文件)。
本节提供两个用于创建或更新 kubeconfig
文件的过程。您可以使用 Amazon CLI,通过 Amazon CLI update-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,则预设情况下, Amazon IAM Authenticator for Kubernetes 使用以下命令返回的相同凭据:
aws sts get-caller-identity
有关更多信息,请参阅《Amazon Command Line Interface 用户指南》中的配置 Amazon CLI。
自动创建 kubeconfig
文件
使用 kubeconfig
创建 Amazon CLI
-
确保您已安装 Amazon CLI 的版本 1.16.156 或更高版本。要安装或升级 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
文件。将示例值
替换为您自己的值。-
预设情况下,在主目录的原定设置
kubeconfig
路径 (.kube/config
) 中创建得到的配置文件,或者或与该位置的现有kubeconfig
合并。您可以使用--kubeconfig
选项指定其他路径。 -
发出
kubectl
命令时,可以使用--role-arn
选项指定 IAM 角色 ARN 供身份验证使用。否则,将使用默认 Amazon CLI 或开发工具包凭证链中的 IAM 实体。通过运行 Amazon CLI 命令可以查看默认aws sts get-caller-identity
或开发工具包标识。 -
有关更多信息,请使用
aws eks update-kubeconfig help
命令参阅帮助页面,或参阅 Amazon CLI 命令参考中的 update-kubeconfig。
注意 要运行以下命令,您必须具有对指定的集群使用
eks:DescribeCluster
API 操作的权限。有关更多信息,请参阅 Amazon EKS 基于身份的策略示例。aws eks update-kubeconfig --region
region-code
--namecluster-name
-
-
测试配置。
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
文件
-
检索集群的端点。将
示例值
替换为集群的值。aws eks describe-cluster \ --region
region-code
\ --namemy-cluster
\ --query "cluster.endpoint" \ --output text输出
https://
E0EED553387FD639757D97A76EXAMPLE
.gr7
.region-code
.eks.amazonaws.com.cn -
检索与集群通信所需的 Base64 编码证书数据。
aws eks describe-cluster \ --region
region-code
\ --namemy-cluster
\ --query "cluster.certificateAuthority.data" \ --output text输出是一个非常长的字符串。
-
如果默认
~/.kube
目录尚不存在,请创建它。mkdir -p ~/.kube
-
使用文本编辑器复制以下代码块之一的内容(具体取决于您的首选客户端令牌方法)。
-
使用 Amazon CLI
aws eks get-token
命令(需要 1.16.156 或更高版本的 Amazon CLI)。apiVersion: v1 clusters: - cluster: server:
endpoint
certificate-authority-data:certificate-data
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
" -
要使用适用于 Kubernetes 的 Amazon IAM 身份验证器
,请执行以下操作: apiVersion: v1 clusters: - cluster: server:
endpoint
certificate-authority-data:certificate-data
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
"
-
-
将
端点
替换为上一步获得的端点。 -
将
certificate-data
替换为上一步中获得的 Base64 编码的证书数据。 -
将
cluster-name
替换为集群名称。 -
(可选)要代入 IAM 角色以执行集群操作(而不是默认 Amazon 凭据提供程序链),请取消注释
-r
和role-arn
行,并替换为 IAM 角色 ARN 以将其用于您的用户。 -
使用您的集群名称作为文件名将该文件保存到默认
kubectl
文件夹。例如,如果集群名称为my-cluster
,则将该文件保存到~/.kube/config-
。my-cluster
-
将该文件路径添加到
KUBECONFIG
环境变量,以便kubectl
了解在哪里查找集群配置。-
对于 macOS 或 Linux 上的 Bash shell:
export KUBECONFIG=$KUBECONFIG:~/.kube/config-
my-cluster
-
对于 Windows 上的 PowerShell:
$ENV:KUBECONFIG="{0};{1}" -f $ENV:KUBECONFIG, "$ENV:userprofile\.kube\config-
my-cluster
"
-
-
(可选) 将配置添加到您的 shell 初始化文件,以便在打开 shell 时对其进行配置。
-
对于 macOS 上的 Bash shell:
echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config-
my-cluster
' >> ~/.bash_profile -
对于 Linux 上的 Bash shell:
echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config-
my-cluster
' >> ~/.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