配置对多个Kubernetes集群的访问
一、背景
当使用 kubectl
连接k8s集群时,kubectl
默认会在 $HOME/.kube
目录下查找名为 config
的文件,该文件用于配置对k8s集群的访问,下文统称为 config
文件。
通过设置 KUBECONFIG
环境变量可以指定使用的 config
文件。
同时当使用 kubectl
时可以通过使用 --kubeconfig
参数引用不同k8s集群的 config
文件来达到访问不同集群的目的,但显然每次使用命令时额外添加一个参数的方式不太友好。
通过扩展k8s提供的 config
文件,将集群、用户和上下文定义在一个 config
文件中之后,用户可以使用 kubectl config use-context
命令快速地在集群之间进行切换。
二、配置多集群访问示例
2.1 使用脚本提取密钥
在原始的 .kube/config
文件中,ca.crt
等内容较多在多集群时显示混乱,将其换成 ca.crt
这种文件形式便于区分。下面的python脚本 k2file.py
将某集群 config
文件中的 ca.crt
等内容另存至对应的 ca.crt
文件中。
#!/usr/bin/env python
#!encoding=utf-8
## 解析kubectl的config文件, 生成ca.crt, client.crt和client.key文件.
## 用法: python k2file.py /etc/kubernetes/admin.conf
## 有个问题: script_dir 总是获取 k2file.py 脚本所在的目录, 而非执行脚本所在的目录.
## 而使用 open() 打开并创建文件时, 如果不写绝对路径, 就会使用以脚本所在位置的相对路径.
## 需要使用 os.getcwd() 代替, 这样得到的是执行脚本时所在的目录, 而非脚本本身所在的目录.
## python2内置yaml模块, python3则需要使用pip安装PyYAML
import yaml
import sys
import os
import base64
def parse_yaml(target_file, curr_dir):
# 打开yaml文件
file = open(target_file, 'r')
file_data = file.read()
file.close()
# 将字符串转化为字典或列表
data = yaml.safe_load(file_data)
ca_crt = data['clusters'][0]['cluster']['certificate-authority-data']
client_crt = data['users'][0]['user']['client-certificate-data']
client_key = data['users'][0][