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

更新时间:2025-03-25 07:51:52

除容器服务控制台之外,您还可以通过Kubernetes命令行工具kubectl来管理集群以及应用。本文介绍如何获取包含当前登录用户身份信息的集群KubeConfig以及通过kubectl客户端连接集群。

1、安装kubectl工具

确定待安装kubectl的客户端机器,下载和安装kubectl

请根据运行环境选择正确版本的 kubectl。以下以 Linux 环境为例。

2、选择KubeConfig类型

ACK集群分别提供用于公网访问和内网访问KubeConfig。

  • 公网连接:可通过公网中的任意机器作为客户端来连接集群。

  • 内网连接:kubectl客户端机器必须与集群位于同一VPC。

说明

RAM用户连接集群前,除容器服务的系统权限外,还需要被授予集群操作的权限,请参见授权

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

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

  3. 集群信息页面,单击连接信息页签,按需选择公网或内网访问凭证。

    对于无需长期连接集群API Server的访问场景,建议优先使用临时的KubeConfig,降低KubeConfig凭据泄露后的安全风险。

    image

3、配置KubeConfig并验证集群连通性

重要
  • KubeConfig签发证书的默认有效期为3年。在临近过期180天内,您可以通过容器服务管理控制台获取集群KubeConfig接口获取轮转后刷新的KubeConfig。新KubeConfig证书的有效期仍为3年,老的KubeConfig凭据在证书过期前仍然有效。请根据控制台显示或接口返回的KubeConfig过期时间及时获取轮转凭据。

  • 根据安全责任共担模型,KubeConfig凭据需要由您负责和维护,请谨慎维护凭据的合理性和有效性,避免KubeConfig泄漏带来的安全风险。

kubectl工具默认会从客户端机器的$HOME/.kube目录下查找名为config的文件。该文件用于存储所要管理集群的访问凭证,kubectl会根据该配置文件连接至集群。

  1. 选择公网访问内网访问页签,单击复制

  2. 将复制的集群凭证内容粘贴至$HOME/.kube目录下的config文件中,保存并退出。

    如果$HOME/目录下没有.kube目录和config文件,请自行创建。

    如果您的集群为ACK专有集群并且集群开启了公网SSH登录,连接信息页签下会展示SSH页签。除以上方式外,您还可以通过SSH登录Master节点,配置集群访问凭证后使用kubectl管理集群,请参见通过SSH连接ACK专有版集群的Master节点

  3. 集群凭证配置完成后,执行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并设置其有效期。

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

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

  3. 集群信息页面,单击连接信息页签,然后单击生成临时 KubeConfig

  4. 临时 KubeConfig对话框,按照页面提示设置临时凭证的有效期及访问集群的方式(包括公网访问和内网访问)。

    • 公网访问:选择公网访问,单击生成临时 KubeConfig,然后单击复制,将内容粘贴到本地计算机的$HOME/.kube/config文件下。

    • 内网访问:选择内网访问,单击生成临时 KubeConfig,然后单击复制,将内容粘贴到本地计算机的$HOME/.kube/config文件下。

    配置后,您可通过临时凭证连接至集群。临时凭证过期后,将无法连接集群。

吊销KubeConfig

当企业内部员工离职或某个签发KubeConfig疑似泄露等情况发生时,吊销该集群的KubeConfig可保障集群的安全。吊销成功后,系统会生成新的KubeConfig和授权绑定,同时,之前已下发的针对该RAM用户或角色的原KubeConfig会失效。详情请参见吊销集群的KubeConfig凭证

清除与恢复KubeConfig

您可以批量清理管理范围内指定集群或RAM用户或角色的KubeConfig权限。清除后,系统不会生成新的KubeConfig。您还可以通过KubeConfig回收站功能恢复已清除的指定KubeConfig权限。详情请参见清除KubeConfig通过ack-ram-tool清理集群中指定用户的权限使用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 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:

如何获取CA、KeyAPI Server信息?

可使用以下命令从KubeConfig文件中提取CA、KeyAPI 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}'`

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

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

相关文档

  • 本页导读 (1)
  • 1、安装kubectl工具
  • 2、选择KubeConfig类型
  • 3、配置KubeConfig并验证集群连通性
  • 相关操作
  • 生成临时KubeConfig
  • 吊销KubeConfig
  • 清除与恢复KubeConfig
  • 常见问题
  • 如何获取KubeConfig中使用的证书所关联的身份信息?
  • 如何获取KubeConfig所使用的证书的过期时间?
  • 如何解决通过kubectl连接集群时提示certificate is valid for错误的问题?
  • 如何获取CA、Key和API Server信息?
  • ACK托管集群能否提供集群根证书密钥用于自助生成KubeConfig证书?
  • 相关文档