更新时间:2026-01-06 GMT+08:00
分享

通过kubectl连接集群

kubectl是Kubernetes提供的一种命令行工具,它用于与Kubernetes集群进行交互,帮助用户管理集群中的资源、查看集群状态、部署应用程序、进行调试等操作。通过kubectl,您可以方便地在命令行界面上执行集群管理任务。如果客户端需要通过kubectl连接到CCE集群,可以选择两种访问方式:
  • 内网访问:客户端通过内网IP或内网域名与集群的API Server进行通信,数据流量不会经过互联网,安全性更强。
  • 公网访问:集群的API Server会暴露一个公共接口,客户端可以通过互联网访问Kubernetes集群。采用公网访问时,您可以选择是否开启“域名双向认证”,区别如下:
    • 不开启“域名双向认证”:kubectl与API Server采用单向证书验证的模式,安全性较低。该模式下,仅涉及kubectl对API Server证书的验证,不涉及API Server对kubectl证书的验证。
    • 开启“域名双向认证”:kubectl与API Server采用双向证书验证的模式,安全性较高。该模式下,除kubectl需要对API Server证书进行验证外,API Server也会对kubectl的证书(kubeconfig文件的client-certificate-data字段)进行验证。关于域名双向认证的更多说明,请参见域名双向认证
  • Autopilot集群版本范围为v1.27.7-r0、v1.28.5-r0及以上:支持“内网域名访问”、“内网IP访问”和“公网访问”。
  • Autopilot集群版本范围为v1.27.7-r0、v1.28.5-r0以下:支持“内网访问”和“公网访问”,其中“内网访问”仅支持使用域名,不支持使用内网IP。

基本原理

kubectl通过kubeconfig配置文件获取集群信息,从而与Kubernetes集群的API服务器进行通信。kubeconfig文件是kubectl访问Kubernetes集群的身份凭证,包含API Server地址、用户认证凭据和等配置信息。通过这些配置信息,kubectl能够实现与Kubernetes集群的交互,并执行各种管理任务。

图1 kubectl连接集群

前提条件

  • 已有一台可访问公网的客户端计算机。
  • 当您使用内网访问时,请确保客户端与待访问集群在同一VPC内。
  • 当您使用公网访问时,请确保待访问集群已绑定公网地址。关于集群绑定公网地址的具体步骤,请参见为API Server绑定EIP

    绑定公网集群的kube-apiserver将会暴露到互联网,存在被攻击的风险,建议对kube-apiserver所在节点的EIP配置DDoS高防服务。

约束与限制

kubeconfig.json文件内包含用户信息,CCE根据用户信息的权限判断kubectl有权限访问哪些Kubernetes资源。即哪个用户获取的kubeconfig.json文件,kubeconfig.json就拥有哪个用户的信息,这样使用kubectl访问时就拥有这个用户的权限。

用户拥有的权限请参见CCE Autopilot集群权限概述

步骤一:下载kubectl

使用kubectl连接集群时,您需要先在客户端中安装kubectl。您可执行kubectl version命令判断是否已安装kubectl,如果已经安装kubectl,则跳过此步骤。本文以Linux环境为例安装和配置kubectl命令行工具,详情请参考安装kubectl

  1. 登录到您的客户端计算机,执行以下命令,下载kubectl工具。其中,v1.25.0为指定的版本号,请根据集群版本进行替换。

    cd /home
    curl -LO https://dl.k8s.io/release/v1.25.0/bin/linux/amd64/kubectl

  2. 执行以下命令,安装kubectl。

    chmod +x kubectl
    mv -f kubectl /usr/local/bin

  3. 执行以下命令,检查kubectl是否安装成功。

    kubectl version

    回显结果如下,则说明kubectl安装成功。

    Client Version: xxx
    Kustomize Version: xxx
    Server Version: xxx

步骤二:获取kubectl配置文件(kubeconfig)

从集群中获取kubeconfig文件,用于连接集群。

  1. 集群“概览”页中的“连接信息”版块,单击kubectl后的“配置”按钮,查看kubectl的连接信息。

    图2 集群连接信息

  2. 在弹出页面中选择“内网访问”或“公网访问”,复制对应的配置文件。

    • Autopilot集群版本范围为v1.27.7-r0、v1.28.5-r0及以上:支持“内网域名访问”、“内网IP访问”和“公网访问”。
    • Autopilot集群版本范围为v1.27.7-r0、v1.28.5-r0以下:支持“内网访问”和“公网访问”,其中“内网访问”仅支持使用域名,不支持使用内网IP。
    图3 下载配置文件

    • kubectl配置文件(kubeconfig)用于对接认证集群,请您妥善保存该认证凭据,防止文件泄露后,集群有被攻击的风险。
    • IAM用户下载的配置文件所拥有的Kubernetes权限与CCE控制台上IAM用户所拥有的权限一致。
    • 如果Linux系统里面配置了KUBECONFIG环境变量,kubectl会优先加载KUBECONFIG环境变量,而不是$home/.kube/config,使用时请注意。

步骤三:配置kubectl

将kubeconfig文件存放于客户端计算机指定路径下,kubectl工具将通过该配置文件访问集群,从而实现与CCE集群的交互。

  1. 登录到您的客户端计算机。
  2. 执行以下命令,创建kubeconfig.yaml文件,文件名支持自定义,用于存放2中获取的配置文件信息。

    vim kubeconfig.yaml

    在kubeconfig.yaml中粘贴2中获取的配置文件信息,并保存。

  3. 执行以下命令,将kubeconfig.yaml放在“$HOME/.kube/config”路径下,kubectl将自动读取该文件信息。如果您将kubeconfig.yaml放在其他路径,则需要通过设置环境变量KUBECONFIG指定文件路径。

    cd /home
    mkdir -p $HOME/.kube
    mv -f ~/kubeconfig.yaml $HOME/.kube/config  # 请将kubeconfig.yaml修改为对应的文件名称

  4. 根据使用场景,切换kubectl的访问模式。

    • VPC内网域名接入访问时,请执行以下命令:
      kubectl config use-context internal
    • VPC内网IP接入访问时,请执行以下命令:
      kubectl config use-context internalIP
    • 公网接入访问且无需开启域名双向认证时,请执行以下命令(集群需绑定公网地址):
      kubectl config use-context external
    • 公网接入访问且需开启域名双向认证时,请执行以下命令(集群需绑定公网地址):
      kubectl config use-context externalTLSVerify

      关于集群域名双向认证的具体说明,请参见域名双向认证

  5. 在客户端中执行以下命令,检查客户端能否通过kubectl连接集群。

    kubectl cluster-info    # 查看集群信息

    若回显结果如下,则说明客户端能够通过kubectl连接集群。

    Kubernetes control plane is running at https://xx.xx.xx.xx:5443
    CoreDNS is running at https://xx.xx.xx.xx:5443/api/v1/namespaces/kube-system/services/coredns:dns/proxy
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

域名双向认证

域名双向认证一种双向身份验证机制,它确保通信双方(即客户端和服务器)都能够验证对方的身份。这种认证方式可以增强集群与客户端之间的安全性,防止未经授权的访问。

  • 集群API Server绑定EIP后,使用kubectl连接集群时域名双向认证默认不开启,可通过kubectl config use-context externalTLSVerify命令切换到externalTLSVerify这个context开启使用。
  • 集群绑定或解绑弹性IP时,集群服务端证书将同步签入最新的集群访问地址(包括集群绑定的弹性IP)。
  • 异步同步集群通常耗时约5-10min,同步结果可以在操作记录中查看“同步证书”。
  • 对于已绑定EIP的集群,如果在使用双向认证时出现认证不通过的情况(x509: certificate is valid),需要重新绑定EIP并重新下载kubeconfig.yaml。
  • 早期未支持域名双向认证时,kubeconfig.yaml中包含"insecure-skip-tls-verify": true字段,如图4所示。如果需要使用双向认证,您可以重新下载kubeconfig.yaml文件并配置开启域名双向认证。
    图4 未开启域名双向认证

常见问题

  • Error from server Forbidden

    使用kubectl在创建或查询Kubernetes资源时,显示如下内容:

    # kubectl get deploy Error from server (Forbidden): deployments.apps is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "deployments" in API group "apps" in the namespace "default"

    原因是用户没有操作该Kubernetes资源的权限,请参见命名空间权限(Kubernetes RBAC授权)为用户授权。

  • The connection to the server localhost:8080 was refused

    使用kubectl在创建或查询Kubernetes资源时,显示如下内容:

    The connection to the server localhost:8080 was refused - did you specify the right host or port?

    原因是由于该kubectl客户端未配置集群认证,请参见步骤二:获取kubectl配置文件(kubeconfig)进行配置。

相关文档