参考:Configure Access to Multiple Clusters

连接不同的k8s集群不用将本节点当作集群的从节点(that’s stupid),只需要将凭证信息放在KUBECONFIG环境变量的路径下即可。

在不同的k8s集群间切换,使用context. context是一个{user,namespace,cluster}三个坐标确定的。即以哪个用户的身份连接哪个集群,默认使用哪个命名空间。

一般每个用户的身份信息在/etc/kubernetes/admin.conf中:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: ...... # 很长
    server: https://xxx.xxx.xxx.xxx:6443 # k8s master地址(其实是etcd的地址)
  name: kubernetes
contexts:
- context:
    # 默认命名使用空间default
    cluster: kubernetes-1  # cluster
    user: kubernetes-admin # user 
  name: kubernetes-1 # 这是context的名字
current-context: kubernetes-1
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: ....# 很长
    client-key-data: .... # 很长

在客户端主机上比如你把这个文件放在/opt/kube/cluster1/admin.conf

就在/etc/profile中添加KUBECONFIG环境变量中添加刚才的路径

export KUBECONFIG=/opt/kube/cluster1/admin.conf:/opt/kube/cluster2/admin.conf

kubectl会去扫描这个环境变量中的所有文件,你可以使用查看刚才的配置有没有被扫描到:

kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://xxx.xxx.xxx.xxx:6443
  name: kubernetes
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://xxx.xxx.xxx.xxx:6443
  name: kubernetes-2
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-1
- context:
    cluster: kubernetes-2
    user: kubernetes-admin-2
  name: kubernetes-2
current-context: kubernetes-1
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
- name: kubernetes-admin-2
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

切换连接的k8s集群

使用不同context就会切换到context的不同集群

$ kubectl config use-context kubernetes-1
Switched to context "kubernetes-1".

查看是否连接到指定集群:

$ kubectl get ns  # 查看是否是目标集群的命名空间列表

查看当前的上下文

$ kubectl config get-contexts   
CURRENT   NAME           CLUSTER        AUTHINFO             NAMESPACE
*         kubernetes-1   kubernetes     kubernetes-admin     # 当前连接的context
          kubernetes-2   kubernetes-2   kubernetes-admin-2 

或者使用:

$ kubectl config current-context      
kubernetes-1

jenkins中KUBECONFIG为何不生效?

jenkins有自己的shell环境,在系统配置->全局变量中设置全局变量。
sh命令会在执行时,将全部全局变量以shell环境变量的方式注入进去。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐