文档首页/ 华为云UCS/ 用户指南/ 集群联邦/ 通过kubectl连接集群联邦
更新时间:2024-10-25 GMT+08:00

通过kubectl连接集群联邦

本文介绍如何使用kubectl连接集群联邦。

权限说明

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

约束限制

  • 出于安全考虑,集群联邦apiserver不提供公网访问地址。UCS通过在您提供的VPC和子网中创建终端节点,并将该终端节点连接到集群联邦apiserver,来打通访问联邦的网络。对于每个集群联邦,UCS在同一VPC中仅会创建一个终端节点。如果VPC中已有连接该联邦apiserver的终端节点,则会进行复用。
  • 当前仅支持“亚太-新加坡”区域的项目下载kubectl配置文件。

前提条件

  • 使用kubectl连接集群联邦,需要先开通集群联邦,并保证集群联邦已开启且状态正常。
  • 当前仅支持从VPC中的客户端通过kubectl连接集群联邦,如您在VPC中没有客户端机器,请创建一台。
  • 已下载kubectl命令行工具并上传至客户端机器。kubectl下载地址请参见Kubernetes 版本发布页面
  • 确保至少具有“iam:clustergroups:get”自定义策略。

通过kubectl连接集群联邦

  1. 登录UCS控制台,单击目标容器舰队名进入“容器舰队信息”页面,在“舰队基本信息”中单击“kubectl”。

    图1 kubectl连接信息

  2. 参照页面中的提示信息,选择对应的项目名称、虚拟私有云(VPC)、控制节点子网以及有效期,单击“下载”,下载kubectl配置文件。

    下载下来的文件名为kubeconfig.json。
    图2 kubectl连接联邦实例
    • kubeconfig.json文件中存在安全泄露风险,请您务必妥善保存。
    • kubectl配置文件有效期可根据实际需求选择,下拉列表内可选范围为:5年、1年、6个月、30天、15天、14天、13天...1天,最短为1天。

  3. 在执行机上安装和配置kubectl。

    1. 拷贝kubectl及其配置文件到上述所选的vpc和子网下的执行机的/home目录下。
    2. 登录到您的执行机,配置kubectl。
      cd /home
      chmod +x kubectl
      mv -f kubectl /usr/local/bin
      mkdir -p $HOME/.kube
      mv -f kubeconfig.json $HOME/.kube/config

集群联邦支持的资源及操作

集群联邦支持的Kubernetes资源及相关操作见表1。表内为“√”表明集群联邦支持对该Kubernetes资源进行该操作,表内为“部分支持”表明集群联邦部分支持对该Kubernetes资源进行该操作,表内为空则表明集群联邦不支持对该Kubernetes资源进行该操作。

表1 集群联邦支持的资源及操作

组/版本

资源

GET

LIST

WATCH

CREATE

UPDATE

PATCH

DELETE

core/v1

pods

pods/log

-

-

-

-

-

-

pods/exec

-

-

-

-

-

pods/status

-

-

-

-

-

-

configmaps

secrets

services

nodes

-

-

namespaces

endpoints

-

-

-

-

-

events

-

-

-

-

-

limitranges

-

-

-

-

-

resourcequotas

-

-

-

-

-

persistentvolumeclaims

-

-

-

-

-

persistentvolumes

-

-

-

-

-

serviceaccounts

-

-

-

-

-

admissionregistration.k8s.io/v1

mutatingwebhookconfigurations

-

-

-

-

-

validatingwebhookconfigurations

-

-

-

-

-

apiextensions.k8s.io/v1

customresourcedefinitions

apiregistration.k8s.io/v1

apiservices

-

-

-

-

-

apps/v1

deployments

deployments/scale

-

-

-

-

-

deployments/status

-

-

-

-

-

-

daemonsets

daemonsets/status

-

-

-

-

-

-

statefulsets

statefulsets/status

-

-

-

-

-

-

replicasets

-

-

-

-

-

autoscaling/(v1、v2、v2beta1、v2beta2)

horizontalpodautoscalers

batch/v1

jobs

jobs/status

-

-

-

-

-

-

cronjobs

cronjobs/status

-

-

-

-

-

-

discovery.k8s.io/v1

endpointslices

-

-

-

-

-

events.k8s.io/v1

events

-

-

-

-

-

networking.k8s.io/v1

ingresses

部分支持

部分支持

ingressclasses

-

-

-

-

-

networkpolicies

-

-

-

-

-

policy/(v1、v1beta1)

poddisruptionbudgets

rbac.authorization.k8s.io/v1

clusterrolebindings

clusterroles

rolebindings

roles

storage.k8s.io/v1

storageclasses

-

-

-

-

-

  • 对于集群中的自定义资源,在集群联邦中注册该CRD后,才可支持通过集群联邦入口进行操作。
  • Ingress对象的UPDATE和PATCH操作仅支持集群联邦控制面中的资源,不支持成员集群中的资源。

常见问题

  • 如果您在访问联邦资源时出现如下错误提示,说明您没有对应资源的操作权限,请参考集群联邦RBAC授权添加授权。

  • 如果您在访问联邦和集群内资源时出现错误提示“Precondition Required”,可能是由于网络问题或成员集群故障导致集群失联,请按以下步骤进行排查:

    1. 检查成员集群的工作状态与接入状态是否正常,具体操作可参考附着集群接入失败如何解决?
    2. 检查成员集群内部署的proxy-agent是否正常工作,具体操作可参考proxy-agent部署失败如何解决?
  • 如果出现“no such host”问题,请按以下步骤进行排查:

    1. 查询vpcep节点是否存在,是否被误删,使用以下命令获取vpcep终端节点id:
      server=`cat config  | jq '.clusters[0].cluster.server'` echo ${server:15:36}
    2. 检查上述终端节点是否存在,如果存在,检查执行机是否和vpcep终端节点位于同一VPC中,二者之间网络是否连通。
  • 如果出现“You must be logged in to the server (Unauthorized)”问题,请按以下步骤进行排查:
    1. 校验证书是否有误:
      将证书保存至临时文件中。
      cd ~/.kube
      cat config  | jq '.clusters[0].cluster."certificate-authority-data"' | tr -d '"' | base64 -d > ca.crt
      cat config  | jq '.users[0].user."client-certificate-data"' | tr -d '"' | base64 -d > tls.crt
      cat config  | jq '.users[0].user."client-key-data"' | tr -d '"' | base64 -d > tls.key
      进行校验。
      openssl verify -CAfile ca.crt tls.crt

      如果输出"tls.crt: OK"说明CA无误,否则需要重新下载KubeConfig。

    2. 输入如下命令,检查证书公钥和私钥是否匹配:
      diff -eq <(openssl x509 -pubkey -noout -in tls.crt) <(openssl rsa -pubout -in tls.key)
      如果输出"writing RSA key",说明证书公钥和私钥匹配,否则说明不匹配,需要重新下载KubeConfig,验证完成后请删除临时文件:
      rm -f ca.crt tls.crt tls.key
    3. 检查证书是否过期。
      首先保存证书到临时文件:
      cd ~/.kube
      cat config  | jq '.users[0].user."client-certificate-data"' | tr -d '"' | base64 -d > tls.crt
      查看证书有效期。
      openssl x509 -noout -text -in tls.crt  | grep -E "Not Before|Not After"
      会输出如下图所示的证书有效区间,请确认当前证书是否在有效期内,如果过期请重新下载KubeConfig,并删除临时文件。
      rm -f tls.crt