• Ukieweb

    佳的博客

    曾梦想仗剑天涯,后来工作忙没去。

通过 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实现多集群、多用户接入的组织、管理

为Kubernetes集群添加用户

官网:Configure Access to Multiple Clusters

官网:Organizing Cluster Access Using kubeconfig Files


0
0
下一篇:k8s 切换上下文context工具 kubectx 切换命名空间工具 kubens

0 条评论

老佳啊

85后,大专学历,中原人士,家里没矿。

由于年轻时长的比较帅气,导致在别人眼里,我一直不谈恋爱的原因是清高,实则是自己的小自卑。最大的人生目标就是找一个相知相爱相容的人,共度余生。

和人相处时如果能感受到真诚,会非常注重彼此的关系,对别人没有什么心机,即使有利益冲突,一般也会以和为贵,因为在这个世界上,物质的东西,从来不会吸引到我。

特别迷恋那些大山大水,如果现在还能隐居,可能早就去了。对那些宏伟的有底蕴的人文景观比较不感冒。

从事于IT行业,却一直对厨房念念不忘,由于身材魁梧,总觉得自己上辈子是个将军,可惜这辈子没当兵,也不会打架。