本文介绍如何获取包含当前登录用户身份信息的集群KubeConfig,并通过kubectl客户端连接集群。
kubectl和KubeConfig介绍
kubectl是标准的Kubernetes命令行管理工具,通过kubectl您可以连接和管理阿里云容器计算服务ACS的集群。KubeConfig中包含了有关集群、用户、命名空间以及身份认证机制的信息。kubectl使用KubeConfig来连接集群。
连接方式
您可以通过公网或内网两种方式来连接集群。
公网连接
当集群开启了API Server公网访问能力(即集群已通过阿里云弹性公网IP EIP暴露了API Server)时,您可以通过公网中的任一机器作为客户端来连接集群。关于如何开启API Server的公网访问能力,请参见控制集群API Server的公网访问能力。
内网连接
当您只需要通过内网来连接集群时,kubectl客户端机器必须与集群位于同一VPC。
步骤一:安装kubectl工具
如果您使用的是RAM用户,在使用kubectl连接集群之前,您需要授予RAM用户集群操作权限。具体操作,请参见授权概述。
根据需要,确定安装kubectl的客户端机器,并确定通过公网或内网来连接集群。
下载kubectl工具,并安装至对应的客户端机器。
具体操作,请参见下载和安装kubectl。由于K8s基于Linux内核,因此需要下载Linux版本的kubectl,使用Linux命令执行操作。
步骤二:配置集群凭证
ACS集群提供了两种集群凭证(即KubeConfig),分别用于公网访问和内网访问。kubectl工具默认会从客户端机器的$HOME/.kube目录下查找名为config的文件。该文件用于存储所要管理集群的访问凭证,kubectl会根据该配置文件连接至集群。
登录容器计算服务控制台,在左侧导航栏选择集群。
在集群页面,单击目标集群名称或者目标集群右侧操作列下的详情。
在集群信息页面,单击连接信息页签,按需单击公网访问或内网访问页签,然后单击复制,获取凭证。
说明为了实现更灵活的集群连接策略,您还可以生成临时KubeConfig,以控制凭证的有效期。具体操作,请参见生成临时的KubeConfig。
将复制的集群凭证内容粘贴至$HOME/.kube目录下的config文件中,保存并退出。
如果$HOME/目录下没有.kube目录和config文件,请自行创建。
步骤三:验证集群连通性
集群凭证配置之后,您可以执行kubectl命令以验证集群的连通性。本文以查询命名空间为例,执行以下命令。
kubectl get namespace
预期输出:
NAME STATUS AGE
default Active 4h39m
kube-node-lease Active 4h39m
kube-public Active 4h39m
kube-system Active 4h39m
生成临时的KubeConfig
为了实现更灵活的集群连接策略,您可以生成临时集群凭证(KubeConfig),并设置凭证使用的有效期。
登录容器计算服务控制台,在左侧导航栏选择集群。
在集群页面,单击目标集群名称或者目标集群右侧操作列下的详情。
在集群信息页面,单击连接信息页签,然后单击生成临时 KubeConfig。
在临时 KubeConfig对话框中,选择临时凭证的有效期和访问集群的方式(公网访问或内网访问),然后单击生成临时 KubeConfig,单击复制,将内容粘贴到本地计算机的
$HOME/.kube/config
文件下。配置完成后,您可以通过临时凭证连接至集群。当临时凭证过期后,将无法连接集群。
常见问题
问题一:如何获取KubeConfig中使用的证书所关联的身份信息?
执行以下命令,获取证书所关联的身份信息。
执行此命令时,请将YOUR_KUBECONFIG_PATH
替换为实际要查询配置文件的绝对路径。默认情况下,kubectl使用$HOME/.kube/config
文件来连接集群,也可以通过设置KUBECONFIG环境变量或设置--kubeconfig
参数来指定其他KubeConfig文件。
grep client-certificate-data YOUR_KUBECONFIG_PATH |awk '{print $2}' |base64 -d | openssl x509 -noout -text |grep Subject:
预期输出类似如下:
Subject: O=system:users, OU=, CN=1***-1673419473
参数说明如下:
O
表示所属的Kubernetes用户组信息。示例中的组名为system:users
。CN
表示关联的用户信息。示例中的用户为1***-1673419473
,其中1***
关联的是您账号下的某个阿里云用户ID。
问题二:如何获取KubeConfig所使用的证书的过期时间?
执行以下命令,获取证书的过期时间。
执行此命令时,请将YOUR_KUBECONFIG_PATH
替换为实际要查询配置文件的绝对路径。默认情况下,kubectl使用$HOME/.kube/config
文件来连接集群,也可以通过设置KUBECONFIG环境变量或设置--kubeconfig
参数来指定其他KubeConfig文件。
grep client-certificate-data YOUR_KUBECONFIG_PATH |awk '{print $2}' |base64 -d | openssl x509 -noout -enddate
预期输出类似如下:
notAfter=Jan 10 06:44:34 2026 GMT
其中Jan 10 06:44:34 2026 GMT
即为证书的过期时间。
您可以在证书过期前的60天内或证书过期后,通过控制台或者OpenAPI获取使用新过期时间的证书的KubeConfig。
问题三:如何解决通过kubectl连接集群时提示certificate is valid for错误的问题?
当您为集群API Server的SLB绑定了新的IP,然后使用kubectl访问这个新的IP时,执行kubectl命令失败并提示Error while proxying request: x509: certificate is valid for xxx
或Unable to connect to the server: x509: certificate is valid for xxx
错误。