获取集群kubeconfig并通过kubectl工具连接集群

本文介绍如何获取包含当前登录用户身份信息的集群kubeconfig,并通过kubectl客户端连接集群。

kubectlkubeconfig介绍

kubectl是标准的Kubernetes命令行管理工具,通过kubectl可连接和管理阿里云容器计算服务(ACS)的集群。kubeconfig中包含了有关集群、用户、命名空间以及身份认证机制的信息。kubectl使用kubeconfig来连接集群。

连接方式

可通过公网或内网两种方式来连接集群。

  • 公网连接

    当集群开启了API Server公网访问能力(即集群已通过阿里云弹性公网IP(EIP)暴露了API Server)时,可通过公网中的任一机器作为客户端来连接集群。关于如何开启API Server的公网访问能力,请参见控制集群API Server的公网访问能力

  • 内网连接

    当只需要通过内网来连接集群时,kubectl客户端机器必须与集群位于同一VPC。

步骤一:安装kubectl工具

确定待安装kubectl的客户端机器,根据运行环境和集群版本安装kubectl

步骤二:配置集群凭证

ACS集群提供了两种集群凭证(即kubeconfig),分别用于公网访问和内网访问。kubectl工具默认会从客户端机器的$HOME/.kube目录下查找名为config的文件。该文件用于存储所要管理集群的访问凭证,kubectl会根据该配置文件连接至集群。

  1. 登录容器计算服务控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情

  3. 集群信息页面,单击连接信息页签,选择临时或长期KubeConfig。对于临时KubeConfig,需合理设置其有效期。

  4. 选择公网访问内网访问页签,单击复制,将复制的KubeConfig内容粘贴至客户端的$HOME/.kube/config文件中,保存并退出。

    如果$HOME/.kube/config 文件不存在,可通过mkdir -p $HOME/.kubetouch $HOME/.kube/config来创建。
  5. 配置完成后,执行kubectl命令以验证集群连通性。

    以查询命名空间为例。

    kubectl get namespaces

    预期输出:

    NAME              STATUS   AGE
    default           Active   4h39m
    kube-node-lease   Active   4h39m
    kube-public       Active   4h39m
    kube-system       Active   4h39m

常见问题

问题一:如何获取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 ServerSLB绑定了新的IP,然后使用kubectl访问这个新的IP时,执行kubectl命令失败并提示Error while proxying request: x509: certificate is valid for xxxUnable to connect to the server: x509: certificate is valid for xxx错误。

可将新的IP加入到API Server证书SAN中。具体操作,请参见自定义集群API Server证书的SAN字段。 下图为示例配置:

image