使用场景
客户想使用同一个kubectl客户端工具,通过切换当前用户的方式达到切换集群的效果。
图 kubectl对接多集群示意
配置前提
- kubectl命令客户端工具所在的ECS云主机,能够curl通集群A和集群B的vip地址+5443端口。
- 以下配置仅供参考,为了方便,直接在A集群的一个节点作为客户端(节点绑定了EIP)。
- 为了方便访问,给B集群的VIP地址绑定了公网IP(假设为:1.2.3.4),理论上如果A、B在同一VPC,可以不这样操作。
客户端配置对A的访问
直接参考《CCE用户指南》中的“通过kubectl连接CCE集群”。
客户端上配置对B的访问
我们要用访问B的集群,要知道B的地址,还要带上认证去访问,那么必须要把相应的信息补齐。
步骤如下:
步骤 1 录入B集群的集群信息
kubectl config set-cluster cluster-k8s --server=https://1.2.3.4:5443 --insecure-skip-tls-verify=true
--insecure-skip-tls-verify=true这个参数一定要带上,这是忽略校验客户端证书
步骤 2 录入去B集群的认证信息
首先在B上操作:
方式一:将B集群的证书传入到客服端使用,在客户端上操作,用户详细信息添加到配置文件中:
kubectl config set-credentials ui-admin --client-certificate=client.crt --embed-certs=true
方式二:在集群B上获取认证token
1.创建一个sa用户
kubectl create sa my-sa
2.给sa用户授权
kubectl create clusterrolebinding myrolebinding --serviceaccount=default:my-sa --clusterrole=cluster-admin
3.获取用户的token
kubectl describe secret my-sa-token-xxx | awk '/token:/{print $2}' > token
将获取的token传入到客户端。
4.客户端上操作,用户详细信息添加到配置文件中:
kubectl config set-credentials ui-admin --token=$token
步骤 3将集群B的上下文详细信息添加到配置文件中
kubectl config set-context ui-admin@cyd --cluster=cluster-k8s --user=ui-admin
此时在客户端上:
Kubectl config use-context internal 切换到集群A
Kubectl config use-context ui-admin@cyd 切换到集群B
步骤 4验证配置
其他情况:
如果配置完报X509错误,应该是忘记传入参数 --insecure-skip-tls-verify=true
可在使用时带上该参数即可,例如:kubectl get pod --insecure-skip-tls-verify=true