概述
本文只要是写关于通过配置文件配置对多个群集的访问。 在一个或多个配置文件中定义了群集,用户和上下文后,可以使用kubectl config use-context
命令快速切换群集。
一.定义clusters, users, and contexts
场景描述
假设你有两个集群,一个用于开发工作,另一个用于临时工作。 在development
集群中,您的前端开发人员在名为frontend
的namespace工作,而您的存储开发人员在storage namespace中工作。 在您的scratch
集群中,开发人员使用default namespace,或者他们认为合适的时候创建其它命名空间。 访问development
群集需要通过证书进行身份验证。 访问scratch
群集需要通过用户名和密码进行认证。
创建文件夹config-exercise
mkdir config-exercise
cd config-exercise
vi config-demo
apiVersion: v1
kind: Config
preferences: {}
clusters:
- cluster:
name: development
- cluster:
name: scratch
users:
- name: developer
- name: experimenter
contexts:
- context:
name: dev-frontend
- context:
name: dev-storage
- context:
name: exp-scratch
这个配置文件中配置了两个集群,一个是development集群,一个是scratch集群
添加集群信息
cd config-exercise
kubectl config --kubeconfig=config-demo set-cluster development --server=https://1.2.3.4 --certificate-authority=fake-ca-file
kubectl config --kubeconfig=config-demo set-cluster scratch --server=https://5.6.7.8 --insecure-skip-tls-verify
添加用户信息
kubectl config --kubeconfig=config-demo set-credentials developer --client-certificate=fake-cert-file --client-key=fake-key-seefile
kubectl config --kubeconfig=config-demo set-credentials experimenter --username=exp --password=some-password
添加上下文信息
kubectl config --kubeconfig=config-demo set-context dev-frontend --cluster=development --namespace=frontend --user=developer
kubectl config --kubeconfig=config-demo set-context dev-storage --cluster=development --namespace=storage --user=developer
kubectl config --kubeconfig=config-demo set-context exp-scratch --cluster=scratch --namespace=default --user=experimenter
查看设置的内容
kubectl config --kubeconfig=config-demo view
apiVersion: v1
clusters:
- cluster:
certificate-authority: fake-ca-file
server: https://1.2.3.4
name: development
- cluster:
insecure-skip-tls-verify: true
server: https://5.6.7.8
name: scratch
contexts:
- context:
cluster: development
namespace: frontend
user: developer
name: dev-frontend
- context:
cluster: development
namespace: storage
user: developer
name: dev-storage
- context:
cluster: scratch
namespace: default
user: experimenter
name: exp-scratch
current-context: ""
kind: Config
preferences: {}
users:
- name: developer
user:
client-certificate: fake-cert-file
client-key: fake-key-file
- name: experimenter
user:
password: some-password
username: exp
该文件说明了有两个集群,访问development集群的需要证书,访问scratch集群需要用户名和密码,当前的current-context
为空
设置current-context为dev-frontend
kubectl config --kubeconfig=config-demo use-context dev-frontend
设置完之后,执行kubectl命令访问到的都是development集群下空间名为frontend的信息
仅查看与当前上下文相关的配置信息 可以使用--minify
参数
kubectl config --kubeconfig=config-demo view --minify
//显示dev-frontend的信息
apiVersion: v1
clusters:
- cluster:
certificate-authority: fake-ca-file
server: https://1.2.3.4
name: development
contexts:
- context:
cluster: development
namespace: frontend
user: developer
name: dev-frontend
current-context: dev-frontend
kind: Config
preferences: {}
users:
- name: developer
user:
client-certificate: fake-cert-file
client-key: fake-key-file
切换集群,访问scratch集群的exp-scratch
kubectl config --kubeconfig=config-demo use-context exp-scratch
kubectl config --kubeconfig=config-demo view --minify
切换集群,访问development集群的dev-storage
kubectl config --kubeconfig=config-demo use-context dev-storage
kubectl config --kubeconfig=config-demo view --minify
创建另一个配置文件名为config-demo-2,内容是定义一个新的context dev-ramp-up
cd config-exercise
vi config-demo-2
apiVersion: v1
kind: Config
preferences: {}
contexts:
- context:
cluster: development
namespace: ramp
user: developer
name: dev-ramp-up
通过设置环境变量KUBECONFIG
,使用config-demo-2上下文
export KUBECONFIG=$KUBECONFIG:config-demo:config-demo-2
cd config-exercise
kubectl config view
//输出的结果将会包括config-demo-2的上下文
contexts:
- context:
cluster: development
namespace: frontend
user: developer
name: dev-frontend
- context:
cluster: development
namespace: ramp
user: developer
name: dev-ramp-up
- context:
cluster: development
namespace: storage
user: developer
name: dev-storage
- context:
cluster: scratch
namespace: default
user: experimenter
name: exp-scratch
更多使用kubeconfig的信息请前往rganize-cluster-access-kubeconfig
添加$HOME/.kube/config文件到环境变量
export KUBECONFIG=$KUBECONFIG:$HOME/.kube/config
查看
kubectl config view
不使用环境变量
export KUBECONFIG=$KUBECONFIG_SAVED
准备ca好证书,以及用户的admin的证书以及相关的key
执行
[root@fabric-cli ssl]# pwd
/root/qinzhao/ssl
[root@fabric-cli ssl]# ls -l
总用量 76
-rw-r--r-- 1 root root 1009 5月 14 13:37 admin.csr
-rw-r--r-- 1 root root 230 5月 14 13:37 admin-csr.json
-rw-r--r-- 1 root root 1679 5月 14 13:37 admin-key.pem
-rw-r--r-- 1 root root 1399 5月 14 13:37 admin.pem
-rw-r--r-- 1 root root 1245 5月 14 13:37 apiserver.csr
-rw-r--r-- 1 root root 514 5月 14 13:37 apiserver-csr.json
-rw-r--r-- 1 root root 1679 5月 14 13:37 apiserver-key.pem
-rw-r--r-- 1 root root 1610 5月 14 13:37 apiserver.pem
-rw-r--r-- 1 root root 293 5月 14 13:37 ca-config.json
-rw-r--r-- 1 root root 1001 5月 14 13:37 ca.csr
-rw-r--r-- 1 root root 209 5月 14 13:37 ca-csr.json
-rw-r--r-- 1 root root 1679 5月 14 13:37 ca-key.pem
-rw-r--r-- 1 root root 1359 5月 14 13:37 ca.pem
-rw-r--r-- 1 root root 1009 5月 14 13:37 client-proxy-auth.csr
-rw-r--r-- 1 root root 1675 5月 14 13:37 client-proxy-auth-key.pem
-rw-r--r-- 1 root root 1399 5月 14 13:37 client-proxy-auth.pem
-rw-r--r-- 1 root root 56 5月 14 13:37 hosts
-rw-r--r-- 1 root root 6442 5月 14 13:37 kubelet.conf
设置集群
kubectl config set-cluster kubernetes --server=https://masterIp:port --certificate-authority=/root/qinzhao/ssl/ca.pem
设置用户信息
kubectl config set-credentials admin --client-certificate=/root/qinzhao/ssl/admin.pem --client-key=/root/qinzhao/ssl/admin-key.pem
设置上下文
kubectl config set-context admin@kubernetes --cluster=kubernetes --user=admin
查看配置信息
[root@fabric-cli ssl]# kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority: /root/qinzhao/ssl/ca.pem
server: https://10.39.0.105:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: admin
name: admin@kubernetes
current-context: admin@kubernetes
kind: Config
preferences: {}
users:
- name: admin
user:
client-certificate: /root/qinzhao/ssl/admin.pem
client-key: /root/qinzhao/ssl/admin-key.pem
设置当前使用的上下文
kubectl config use-context admin@kubernetes
验证
[root@fabric-cli ssl]# kubectl get pods -n kube-system | grep calico
calico-node-75x7c 2/2 Running 0 31d
calico-node-d0dz4 2/2 Running 0 31d
calico-node-jjcgc 2/2 Running 0 31d
calico-policy-controller-4081051551-4rc73 1/1 Running 0 22d
参考
configure-access-multiple-clusters