多云和混合云:云原生多集群和应用管理
上QQ阅读APP看书,第一时间看更新

2.5 配置多集群的访问和切换

通过前面的实践,我们已经分别创建了local-minikube、idc-kubeadm、idc-rancher和aliyun-k8s几个不同的Kubernetes容器集群,本节将展示如何使用它们的kubeconfig文件配置对多个集群进行访问和上下文切换。

在本示例中,我们将把上述每个Kubernetes集群的集群信息、用户信息和上下文信息合并到同一个配置文件中,其中local-minikube、idc-kubeadm、idc-rancher的集群API Server使用内网连接端点,aliyun-k8s使用公网连接端点,idc-rancher集群则通过token的方式访问API Server,其他集群都通过证书进行认证。

配置访问local-minikube,通过以下步骤分别配置集群信息、用户信息和上下文信息到/tmp/kubeconfig_all文件中。minikube_ca.crt、minikube_client.crt、minikube_client.key的内容可以从local-minikube集群节点的~/.kube/config中获取。

为集群local-minikube配置集群信息并保存到/tmp/kubeconfig.all文件中。

$ kubectl config set-cluster local-minikube --certificate-authority=minikube_ca.crt --embed-certs=true --server=https://192.168.0.44:8443  --kubeconfig=/tmp/kubeconfig_all

为集群local-minikube配置证书信息并保存到/tmp/kubeconfig.all文件中。

$ kubectl config set-credentials local-minikube --client-certificate=minikube_client.crt --embed-certs=true --client-key=minikube_client.key --kubeconfig=  /tmp/kubeconfig_all

为集群local-minikube配置上下文信息并保存到/tmp/kubeconfig.all文件中。

$ kubectl config set-context local-minikube --cluster=local-minikube   --user=local-minikube --kubeconfig=/tmp/kubeconfig_all

查看当前kubeconfig文件/tmp/kubeconfig_all中定义的集群上下文,如下所示。

$ kubectl config get-contexts --kubeconfig=/tmp/kubeconfig_all
CURRENT   NAME             CLUSTER          AUTHINFO         NAMESPACE
          local-minikube   local-minikube   local-minikube

切换当前上下文为local-minikube集群,如下所示。

$ kubectl config use-context local-minikube  --kubeconfig=/tmp/kubeconfig_all

查看集群local-minikube的运行状态,如下所示。

$ kubectl cluster-info --kubeconfig=/tmp/kubeconfig_all
Kubernetes control plane is running at https://192.168.0.44:8443
KubeDNS is running at https://192.168.0.44:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

以同样的方式,将idc-kubeadm和aliyun-k8s集群的证书认证方式配置到/tmp/kubeconfig_all中。

分别配置idc-kubeadm的集群信息、用户信息和上下文信息并保存在/tmp/kubeconfig.all文件中,命令如下所示。

$ kubectl config set-cluster idc-kubeadm  --certificate-authority=idc-kubeadm_ca.crt --embed-certs=true --server=https://192.168.0.45:6443--kubeconfig=/tmp/kubeconfig_all

$ kubectl config set-credentials idc-kubeadm --client-certificate=idc-kubeadm_client.crt --embed-certs=true --client-key=idc-kubeadm_client.key--kubeconfig=/tmp/kubeconfig_all

$ kubectl config set-context idc-kubeadm --cluster=idc-kubeadm --user=idc-kubeadm --kubeconfig=/tmp/kubeconfig_all

切换上下文为idc-kubeadm并检查集群的运行状态,验证配置是否正常,命令如下所示。

$ kubectl config use-context idc-kubeadm --kubeconfig=/tmp/kubeconfig_all

$ kubectl cluster-info --kubeconfig=/tmp/kubeconfig_all
Kubernetes control plane is running at https://192.168.0.45:6443
KubeDNS is running at https://192.168.0.45:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

继续配置aliyun-k8s的集群信息、用户信息和上下文信息并保存在/tmp/kubeconfig.all文件中,命令如下所示。

$ kubectl config set-cluster aliyun-k8s --certificate-authority=aliyun-k8s_ca.crt --embed-certs=true --server=https://39.106.178.250:6443 --kubeconfig=/tmp/kubeconfig_all

$ kubectl config set-credentials aliyun-k8s --client-certificate=aliyun-k8s_client.crt --embed-certs=true --client-key=aliyun-k8s_client.key --kubeconfig=/tmp/kubeconfig_all

$ kubectl config set-context aliyun-k8s --cluster=aliyun-k8s --user=aliyun-k8s--kubeconfig=/tmp/kubeconfig_all

切换上下文为aliyun-k8s并检查集群的运行状态,验证配置信息是否正常,命令如下所示。

$ kubectl config use-context aliyun-k8s --kubeconfig=/tmp/kubeconfig_all

$ kubectl cluster-info --kubeconfig=/tmp/kubeconfig_all
Kubernetes control plane is running at https://39.106.178.250:6443
metrics-server is running at https://39.106.178.250:6443/api/v1/namespaces/kube-system/services/heapster/proxy
KubeDNS is running at https://39.106.178.250:6443/api/v1/namespaces/kube-  system/services/kube-dns:dns/proxy

配置idc-rancher的集群信息、用户信息和上下文信息时,需要配置用户使用token方式访问集群,命令如下。

$ kubectl config set-cluster idc-rancher --certificate-authority=idc-rancher_ca.crt --embed-certs=true --server=https://192.168.0.48:6443 --kubeconfig=/tmp/kubeconfig_all

$ kubectl config set-credentials idc-rancher --token=kubeconfig-user-8hq7r.c-l j287:hcj4zsvpng4kqdtqscv9v9jkdgwqmg97s58dlj47plmddf5f2wpdmw --kubeconfig=/tmp/kubeconfig_all

$ kubectl config set-context idc-rancher --cluster=idc-rancher --user=idc-rancher --kubeconfig=/tmp/kubeconfig_all

切换上下文为idc-rancher并检查集群的运行状态,验证配置是否正常,命令如下所示。

$ kubectl config use-context idc-rancher --kubeconfig=/tmp/kubeconfig_all

$ kubectl cluster-info --kubeconfig=/tmp/kubeconfig_all
Kubernetes control plane is running at https://192.168.0.48:6443
CoreDNS is running at https://192.168.0.48:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

设置KUBECONFIG环境变量,默认使用/tmp/kubeconfig_all或将/tmp/kubeconfig_all复制为~/.kube/config,命令如下。

$ export KUBECONFIG=/tmp/kubeconfig_all

或使用如下命令。

$ cp -i /tmp/kubeconfig_all ~/.kube/config

再次运行以下命令,查看当前已经配置了的集群上下文列表。

$ kubectl config get-contexts
CURRENT   NAME             CLUSTER          AUTHINFO         NAMESPACE
          aliyun-k8s       aliyun-k8s       aliyun-k8s
          idc-kubeadm      idc-kubeadm      idc-kubeadm
*         idc-rancher      idc-rancher      idc-rancher
          local-minikube   local-minikube   local-minikube