通过 kubeconfig 文件 管理切换 多用户 多k8s集群
一、概述
kubectl 命令访问集群时,默认情况下在 $HOME/.kube 目录下寻找名为 config 的配置文件,配置文件中包含集群ip地址、端口号、用户名、密码、证书、名称空间等信息,kubectl 据此建构访问集群的上下文。也可以通过 KUBECONFIG 环境变量 或者 --kubeconfig 覆盖默认配置文件。
在实际应用中,往往需要同时使用多套环境如开发、测试、显示、生产等。一个 kubectl 客户端需要使用多个用户、多种认证授权机机制,访问不同集群、不同名称空间。Kubernetes 通过 Kubeconfig 为 kubectl 命令组织管理各种不同的接入场景。
二、定义集群、用户、上下文
1. 创建config-exercise目录,在目录下创建文件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
以上内容涉及两个集群、两个用户、三种访问上下文,它是组织管理多用户多集群接入的框架,只是定义了名称,需要在后续操作中加入具体内容。
2. 添加集群信息
进入config-exercise目录,添加与集群有关的详细信息:
假设有两个集群,一个用于开发,称为 development 集群。另一个用于测试,称为 scrach 集群。
访问 development 集群使用证书进行身份认证,scrach 集群使用用户名密码。
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
字段解释
--kubeconfig: 执行 kubeconfig 文件
set-cluster:设置 集群名称。这是k8s集群在kubeconfig中的别名,可以和实际中不一样,用在 context 中关联
--server:k8s 集群 master 上 API Server 连接 ip 端口
--insecure-skip-tls-verify: 使用证书认证
--certificate-authority:使用 用户名密码认证
3. 添加用户详细信息:
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
set-credentials :用户别名。在kubeconfig中的别名,用在 context 中关联
--client-certificate: 用户 cer
--client-key:用户 key
--username:账号名
--password:账号密码
4. 添加 context 上下文详细信息:
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
每个 context 是一个三元组:用户、集群、名称空间。
如 dev-frontend 上下文表述的意思是:利用 developer 用户的证书访问 development 集群中的 fronted 名称空间。
set-context:定义context的别名,命令切换场景的时候,使用的名字
--cluster:关联的哪个 集群,要和 kubeconfig 设置的别名一致
--namespace:关联的默认名称空间,要和集群中名称空间一致。这里指定的是默认访问的命名空间,也可以通过命令 kubectl -n newns 更改命名空间。
--user:关联的哪个用户,使用此用户的信息,要和 kubeconfig 设置的别名一致
5.直接打开config-demo或者通过如下命令查看修改后的文件内容:
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
current-context :当前生效的上下文,目前为空
只查看与当前上下文相关的配置:
kubectl config --kubeconfig=config-demo view --minify
输出:
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
查看详细输出
kubectl config --kubeconfig=config-demo view --raw
6. 切换上下文/用户 连接不同集群
如果想 切换到 scrach 环境,则:
kubectl config --kubeconfig=config-demo use-context exp-scratch
切换到 development 环境 中的 storage 名称空间:
kubectl config --kubeconfig=config-demo use-context dev-storage
三、删除用户 集群 上下问
要删除用户,您可以运行
kubectl --kubeconfig=config-demo config unset users.<name>
要删除集群,可以运行
kubectl --kubeconfig=config-demo config unset clusters.<name>
要删除上下文,可以运行
kubectl --kubeconfig=config-demo config unset contexts.<name>
四、设置 KUBECONFIG 环境变量
kubectl 命令访问集群时,默认情况下在 $HOME/.kube 目录下寻找名为 config 的配置文件,也可以通过 KUBECONFIG 环境变量 或者 --kubeconfig 参数覆盖默认配置文件。
--kubeconfig 前面已经使用很多次,如:
kubectl config --kubeconfig=config-demo use-context exp-scratch
设置 kubeconfig 环境变量
# Linux export KUBECONFIG=$KUBECONFIG:$HOME/.kube/config # Windows Powershell $Env:KUBECONFIG=($Env:KUBECONFIG;$HOME/.kube/config)
参考文档:
Kubernetes之Kubeconfig实现多集群、多用户接入的组织、管理
官网:Configure Access to Multiple Clusters
官网:Organizing Cluster Access Using kubeconfig Files
共 0 条评论