kubernetes 配置对多个群集的访问
概述
本文只要是写关于通过配置文件配置对多个群集的访问。 在一个或多个配置文件中定义了群集,用户和上下文后,可以使用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
执行
[[email protected]-cli ssl]# pwd
/root/qinzhao/ssl
[[email protected]-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 [email protected] --cluster=kubernetes --user=admin
查看配置信息
[[email protected]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: [email protected]
current-context: [email protected]
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
验证
[[email protected] 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
推荐阅读
-
kubernetes 配置对多个群集的访问
-
用定制标签库和配置文件实现对JSP页面元素的访问控制
-
mysql中对已经存在的用户名如何指定仅可以访问某一个或指定多个数据库,别的数据库限制无法访问无法读到
-
用定制标签库和配置文件实现对JSP页面元素的访问控制
-
Django项目中包含多个应用时对url的配置方法
-
nginx 配置虚拟主机,实现在一个服务器可以访问多个网站的方法
-
Django项目中包含多个应用时对url的配置方法
-
[原创] 多个域名配置不同的SSL证书访问同一VPS
-
Wind11/10中如何禁用对Firefox中的配置文件的访问
-
通过Spring Boot配置动态数据源访问多个数据库的实现代码