除了通过容器服务控制台来管理集群之外,您还可以通过Kubernetes命令行工具kubectl来管理集群以及应用。本文介绍如何获取包含当前登录用户身份信息的集群KubeConfig以及通过kubectl客户端连接集群。
索引
kubectl和KubeConfig介绍
kubectl是标准的Kubernetes命令行管理工具,通过kubectl您可以连接和管理阿里云容器服务ACK的所有集群类型,包括ACK专有版、ACK托管版(包括ACK基础版和ACK Pro版)以及ACK Serverless。
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命令执行操作。
步骤二:选择集群凭证类型
ACK集群提供了两种集群凭证(即KubeConfig),分别用于公网访问和私网访问。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
在集群信息页面,单击连接信息页签,根据需要选择公网或私网访问凭证。
说明为了实现更灵活的集群连接策略,您还可以生成临时KubeConfig,以控制凭证的有效期。详情请参见生成临时的KubeConfig。
步骤三:配置集群凭证
KubeConfig签发证书的默认有效期为3年。在临近过期180天内,您可以通过容器服务管理控制台或获取集群KubeConfig接口获取轮转后刷新的KubeConfig,新KubeConfig证书的有效期仍为3年,老的KubeConfig凭据在证书过期前仍然有效,请您根据控制台显示或接口返回的KubeConfig过期时间及时获取轮转凭据。
对于无需长期连接集群API Server的访问场景,建议您优先使用临时的KubeConfig,降低KubeConfig凭据泄露后的安全风险。
根据安全责任共担模型,Kubeconfig凭据需要由您负责和维护,请谨慎维护凭据的合理性和有效性,避免KubeConfig泄漏带来的安全风险。
kubectl工具默认会从客户端机器的$HOME/.kube
目录下查找名为config
的文件。该文件用于存储所要管理集群的访问凭证,kubectl会根据该配置文件连接至集群。
选择公网访问或私网访问页签,单击复制。
将复制的集群凭证内容粘贴至
$HOME/.kube
目录下的config
文件中,保存并退出。说明如果
$HOME/
目录下没有.kube
目录和config
文件,请自行创建。如果您使用的是专有版集群并且集群开启了公网SSH登录,连接信息页签下会展示SSH页签。除了参照以上方式连接集群外,您还可以通过SSH登录Master节点,配置集群访问凭证后,即可使用kubectl管理集群。关于如何通过SSH方式连接专有版集群,请参见通过SSH连接ACK专有版集群的Master节点。
步骤四:验证集群连通性
集群凭证配置之后,您可以执行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,然后单击复制,将内容粘贴到本地计算机的
$HOME/.kube/config
文件下。
配置完成后,您可通过临时凭证连接至集群。临时凭证过期后,将无法连接集群。
吊销KubeConfig
当企业内部员工离职或是某签发KubeConfig疑似泄露等情况发生时,吊销该集群的KubeConfig可有效保障集群的安全。吊销成功后,系统会生成新的KubeConfig和授权绑定,同时,之前已下发的针对该RAM用户或角色的原KubeConfig会失效。具体操作,请参见吊销集群的KubeConfig凭证。
清除与恢复KubeConfig
如果您需要批量清理管理范围内指定集群维度或RAM用户或角色维度的KubeConfig权限,您可以使用清除KubeConfig功能。成功清除后,系统不会生成新的KubeConfig。同时,您还可以通过KubeConfig回收站功能恢复已清除的指定KubeConfig权限。具体操作,请参见清除KubeConfig、通过ack-ram-tool清理集群中指定用户的权限、使用KubeConfig回收站。
常见问题
问题一:如何获取KubeConfig中使用的证书所关联的身份信息?
执行如下命令,获取名为kubeconfig的文件使用的证书所关联的身份信息。
grep client-certificate-data kubeconfig |awk '{print $2}' |base64 -d | openssl x509 -noout -text |grep Subject:
默认情况下,kubectl使用$HOME/.kube/config
文件来连接集群,也可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其他KubeConfig文件。
预期输出类似如下:
Subject: O=system:users, OU=, CN=1***-1673419473
其中:
O
:所属的Kubernetes用户组信息,示例中的组名为system:users
。CN
:关联的用户信息。示例中的用户为1***-1673419473
,其中1***
关联的是您账号下的某个阿里云用户ID。
问题二:如何获取KubeConfig所使用的证书的过期时间?
执行如下命令,获取名为KubeConfig的文件使用的证书所关联的过期时间。
grep client-certificate-data kubeconfig |awk '{print $2}' |base64 -d | openssl x509 -noout -enddate
默认情况下,kubectl使用$HOME/.kube/config
文件来连接集群,也可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其他KubeConfig文件。
预期输出类似如下:
notAfter=Jan 10 06:44:34 2026 GMT
其中Jan 10 06:44:34 2026 GMT
即为证书的过期时间。
您可以在证书过期前的180天内或证书过期后,通过控制台或者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
错误。
如果您使用的是托管版集群,您可以将新的IP加入到API Server证书SAN中,解决此问题。详细信息,请参见自定义集群API Server证书SAN。
如果您使用的是专有版集群,您可以配置kubectl忽略这个错误,解决此问题。
重要使用
insecure-skip-tls-verify
配置忽略该错误将导致客户端不再校验API Server的证书。建议您将专有版集群迁移为ACK Pro集群,然后再通过将新的IP加入到API Server证书SAN中的方法解决该问题。更多信息,请参考热迁移ACK专有版集群至ACK集群Pro版。您可以在执行kubectl命令的时候指定
--insecure-skip-tls-verify
参数。kubectl -s https://<IP>:6443 --insecure-skip-tls-verify get ns
或者修改KubeConfig文件内容,新增
insecure-skip-tls-verify: true
配置,然后删除certificate-authority-data
配置。apiVersion: v1 clusters: - cluster: server: https://<IP>:6443 insecure-skip-tls-verify: true name: kubernetes contexts:
问题四:托管集群能否提供集群根证书密钥用于自助生成KubeConfig证书?
托管集群不对外提供集群根证书密钥,建议您通过控制台或OpenAPI获取集群KubeConfig。
相关文档
你可以调用API查询集群的KubeConfig,请参见DescribeClusterUserKubeconfig - 查询集群KubeConfig。
您可以按需对KubeConfig进行吊销、清除等操作,避免KubeConfig泄露带来的数据泄露等安全风险,请参见KubeConfig操作指引。