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

除容器服务控制台外,还可以使用Kubernetes命令行工具kubectl来管理集群与应用。通过kubectl连接集群时,需先获取包含当前用户身份信息的集群KubeConfig。

步骤一:安装并配置kubectl客户端

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

步骤二获取并使用KubeConfig

1. 选择KubeConfig类型

KubeConfig包含访问集群所需的认证信息,请根据安全需求和使用场景选择KubeConfig类型。

重要

根据安全责任共担模型,KubeConfig凭证需自行负责和维护,请谨慎维护其合理性和有效性,定期轮换KubeConfig并遵循最小化权限策略,避免KubeConfig泄露带来的安全风险。

  • 根据KubeConfig有效期:

    • 临时KubeConfig:支持配置KubeConfig有效期(30分钟~3天),过期后自动失效,以降低KubeConfig泄露的安全风险。适用于日常运维、故障排查、CI/CD流水线等无需长期连接API Server的场景。

    • 长期KubeConfig:默认有效期为3年,适用于无法频繁更新KubeConfig的自动化系统或长期监控服务。

  • 根据访问集群的方式:

    • 内网访问:获取内网访问的KubeConfig,此时kubectl客户端机器必须与集群位于同一VPC。通过阿里云内网连接时,延迟更低,更安全。

    • 公网访问:获取公网访问的KubeConfig,通过公网中的任意机器作为客户端来连接集群。依赖 EIP 连接 API Server,适用于本地开发或远程运维。

      EIP 绑定后,相关费用请参见按量付费
  • 如使用ACK专有集群且已开启公网访问,可通过 SSH 从 Master 节点获取 KubeConfig 后在本地使用 kubectl 管理集群。详情请参见通过SSH连接ACK专有版集群的Master节点

2. 获取KubeConfig并连接集群

在控制台获取 KubeConfig 后,kubectl 可依据该文件连接并管理集群。

RAM用户连接集群前,除容器服务的系统权限外,还需要被授予集群操作的权限,请参见授权
  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 有效性:为防止 KubeConfig 过期导致集群访问中断,请及时更新。

    长期 KubeConfig 有效期为3年,建议在临近过期的180天内,通过容器服务管理控制台DescribeClusterUserKubeconfig获取新KubeConfig。

    KubeConfig有效期仍为3年,旧 KubeConfig 在证书过期前仍然有效。
  • 快速吊销KubeConfig:当KubeConfig疑似泄露时,应立即吊销集群的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:
请按实际情况修改kubeconfig路径。默认情况下,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
请按实际情况修改kubeconfig路径。默认情况下,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。

如何获取客户端证书、客户端私钥和API Server信息

可使用以下命令从KubeConfig文件中提取客户端证书、客户端私钥和API Server信息。

cat  ./kubeconfig |grep client-certificate-data | awk -F ' ' '{print $2}' |base64 -d > ./client-cert.pem
cat  ./kubeconfig |grep client-key-data | awk -F ' ' '{print $2}' |base64 -d > ./client-key.pem
APISERVER=`cat  ./kubeconfig |grep server | awk -F ' ' '{print $2}'`
请按实际情况修改kubeconfig路径。默认情况下,kubectl使用$HOME/.kube/config来连接集群。也可通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其他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错误。

  • ACK托管集群:将新的IP加入到API Server证书SAN中,请参见自定义集群API Server证书SAN

  • ACK专有集群:配置kubectl,使用insecure-skip-tls-verify配置忽略此错误。

    重要

    此方式将导致客户端不再校验API Server证书,不建议在生产环境中使用。建议热迁移ACK专有集群至ACK托管集群Pro,然后再将新IP加入到API Server证书SAN中来解决此问题。

    • 方式一:执行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:
      ...

ACK托管集群能否提供集群根证书密钥用于自助生成KubeConfig证书?

ACK托管集群不对外提供集群根证书密钥,建议通过控制台或OpenAPI获取集群KubeConfig。

相关文档