欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

kubernetes 配置对多个群集的访问

程序员文章站 2024-03-11 17:07:01
...

概述
本文只要是写关于通过配置文件配置对多个群集的访问。 在一个或多个配置文件中定义了群集,用户和上下文后,可以使用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

参考
configure-access-multiple-clusters

相关标签: kubectl