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
执行

[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

你可能感兴趣的:(kubetnetes)