更新时间:2024-12-18 GMT+08:00

通过kubectl连接集群

操作场景

本文将介绍如何通过kubectl连接集群。

权限说明

kubectl访问集群是通过集群上生成的配置文件(kubeconfig.json)进行认证,kubeconfig.json文件内包含用户信息,CCE根据用户信息的权限判断kubectl有权限访问哪些Kubernetes资源。即哪个用户获取的kubeconfig.json文件,kubeconfig.json就拥有哪个用户的信息,这样使用kubectl访问时就拥有这个用户的权限。

用户拥有的权限请参见集群权限(IAM授权)与命名空间权限(Kubernetes RBAC授权)的关系

使用kubectl连接集群

若您需要从客户端计算机连接到Kubernetes集群,可使用Kubernetes命令行客户端kubectl,您可登录CCE控制台,单击待连接集群名称,在集群“总览”页面查看访问地址以及kubectl的连接步骤。
图1 集群连接信息

您需要先下载kubectl以及配置文件,复制到您的客户端机器,完成配置后,即可以访问Kubernetes集群。使用kubectl连接集群的步骤如下:

  1. 准备环境

    您需要准备一台与集群同VPC的虚拟机,并绑定弹性公网IP用于下载kubectl。

  2. 下载kubectl

    如果已经安装kubectl,则跳过此步骤,您可执行kubectl version命令判断是否已安装kubectl。

    本文以Linux环境为例安装和配置kubectl,详情请参考安装kubectl

    1. 登录到您的客户端机器,下载kubectl。
      cd /home
      curl -LO https://dl.k8s.io/release/{v1.25.0}/bin/linux/amd64/kubectl

      其中{v1.25.0}为指定的版本号,请根据集群版本进行替换。

    2. 安装kubectl。
      chmod +x kubectl
      mv -f kubectl /usr/local/bin

  3. 获取kubectl配置文件

    在集群“总览”页中的“连接信息”版块,单击kubectl后的“配置”按钮,查看kubectl的连接信息,并在弹出页面中选择访问方式,然后下载对应的配置文件。

    • Autopilot集群版本范围为v1.27.7-r0、v1.28.5-r0及以上:支持“内网域名访问”、“内网IP访问”和“公网访问”。
    • Autopilot集群版本范围为v1.27.7-r0、v1.28.5-r0以下:支持“内网访问”和“公网访问”,其中“内网访问”仅支持使用域名,不支持使用内网IP。
    图2 下载配置文件
    • kubectl配置文件(kubeconfig)用于对接认证集群,请您妥善保存该认证凭据,防止文件泄露后,集群有被攻击的风险。
    • IAM用户下载的配置文件所拥有的Kubernetes权限与CCE控制台上IAM用户所拥有的权限一致。
    • 如果Linux系统里面配置了KUBECONFIG环境变量,kubectl会优先加载KUBECONFIG环境变量,而不是$home/.kube/config,使用时请注意。

  4. 配置kubectl

    以Linux环境为例配置kubectl。
    1. 登录到您的客户端机器,复制3中下载的配置文件(以kubeconfig.yaml为例)到您客户端机器的/home目录下。
    2. 配置kubectl认证文件。
      cd /home
      mkdir -p $HOME/.kube
      mv -f kubeconfig.yaml $HOME/.kube/config
    3. 根据使用场景,切换kubectl的访问模式。
      • VPC网络内域名接入访问请执行:
        kubectl config use-context internal
      • 互联网接入访问请执行(集群需绑定公网地址):
        kubectl config use-context external
      • 互联网接入访问如需开启双向认证请执行(集群需绑定公网地址):
        kubectl config use-context externalTLSVerify

常见问题

  • 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认证文件进行配置。