保存所有集群的 kubeconfig 配置文件
本文永久链接: https://www.xtplayer.cn/rancher/save-all-kubecfg/
仅具有用户权限的配置文件
每一个分配集群资源权限的用户,都可以在集群页找到对应的 kubeconfig 配置文件。此 kubectl 配置文件, 仅可以操作自己有权限的资源。
你如果有很多集群有资源权限,并且你想统一保存 kubeconfig 文件,那么可以通过以下脚本来批量保存。
前提要求
需要在运行脚本的主机上安装 jq 工具
centos
yum install -y jq
ubuntu
apt-get install jq -y
脚本使用
生成 API KEY,用于 Rancher UI API 的访问;
- 切换到全局视图
- 右上角点击个人头像,接着点击 API & KEY
- 点击 添加 Key,
- 描述可以随便填写;
- 自动失效时间建议选择 1 天,一天后自动删除;
- 作用范围不用选择,默认全部范围;
- 点击 创建 后复制 Bearer Token 备用
保存以下内容为任意脚本;
#/bin/bash
RANCHER_TOKEN="<Bearer Token>"
RANCHER_URL='https://xxxx.rancher.com' # 不要加后缀 /
# 具有用户权限的 kube_config
## 获取集群 ID 列表
CLUSTER_ID_LIST=$(
curl -LSs \
-u "${RANCHER_TOKEN}" \
-X GET \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
${RANCHER_URL}/v3/clusters/ | jq -r .data[].id
)
## 获取全部集群的 kube_config
for CLUSTER_ID in ${CLUSTER_ID_LIST};
do
curl -LSs \
-u "${RANCHER_TOKEN}" \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
${RANCHER_URL}/v3/clusters/${CLUSTER_ID}?action=generateKubeconfig | \
jq -r .config > kube_config_${CLUSTER_ID}.yaml
done根据前面步骤中复制的 Bearer Token 设置 RANCHER_TOKEN。RANCHER_URL 设置为 rancher server url,注意不要尾部的
/
。在能访问 rancher server 的任意主机上运行本脚本
具有集群管理员权限的配置文件
如果你是管理员,应该备份所有集群具有管理员权限的 kubeconfig 配置文件,当集群出现异常,需要通过 kubectl 命令行去操作集群。
前提要求
需要在运行脚本的主机上安装 jq 工具
centos
yum install -y jq
ubuntu
apt-get install jq -y
脚本使用
需要用管理员登录 Rancher UI,管理员创建的 API KEY 具有所有集群的管理员权限。
生成 API KEY,用于 Rancher UI API 的访问
- 切换到全局视图
- 右上角点击个人头像,接着点击 API & KEY
- 点击 添加 Key,
- 描述可以随便填写;
- 自动失效时间建议选择 1 天,一天后自动删除;
- 作用范围不用选择,默认全部范围;
- 点击 创建 后复制 Bearer Token 备用
保存以下内容为任意脚本;
#/bin/bash
RANCHER_TOKEN="<Bearer Token>"
RANCHER_URL='https://xxxx.rancher.com' # 不要加后缀 /
# 具有管理员权限的 kube_config
## 获取集群 ID 列表
CLUSTER_ID_LIST=$(
curl -LSs \
-u "${RANCHER_TOKEN}" \
-X GET \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
${RANCHER_URL}/v3/clusters/ | jq -r .data[].id
)
## 轮训集群 ID 列表,获取每个集群 system 项目 ID,然后获取 kube_config
for CLUSTER_ID in ${CLUSTER_ID_LIST};
do
# 获取集群 ${CLUSTER_ID} system 项目 ID
SYSTEM_PROJECT_ID=$(
curl -LSs \
-u "${RANCHER_TOKEN}" \
-X GET \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
${RANCHER_URL}/v3/clusters/${CLUSTER_ID}/projects?name=System | jq -r ".data[].id"
)
# 获取集群 ${CLUSTER_ID} full-cluster-state 配置映射文件,老版本是通过 full-cluster-state 配置映射来保存 admin_kube_config 配置文件
CONFIGMAP_FULL_CLUSTER_STATE=$(
curl -LSs \
-u "${RANCHER_TOKEN}" \
-X GET \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
${RANCHER_URL}/v3/project/${SYSTEM_PROJECT_ID}/configMaps/kube-system:full-cluster-state | \
jq -r .data.\"full-cluster-state\" | \
jq -r .currentState.certificatesBundle.\"kube-admin\".config
)
# 获取集群 ${CLUSTER_ID} kube-admin 密文,老版本是通过 kube-admin 密文来保存 admin_kube_config 配置文件
SECRETS_KUBE_ADMIN=$(
curl -LSs \
-u "${RANCHER_TOKEN}" \
-X GET \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
${RANCHER_URL}/v3/project/${SYSTEM_PROJECT_ID}/namespacedSecrets/kube-system:kube-admin | \
jq -r .data.Config
)
if [[ ${CONFIGMAP_FULL_CLUSTER_STATE} != 'null' ]]; then
echo "${CONFIGMAP_FULL_CLUSTER_STATE}" > kube_config_${CLUSTER_ID}.yaml
elif [[ ${SECRETS_KUBE_ADMIN} != 'null' ]]; then
echo "${SECRETS_KUBE_ADMIN}" > kube_config_${CLUSTER_ID}.yaml
else
echo "没有 full-cluster-state configMaps 和 kube-admin Secrets"
fi
done根据前面步骤中复制的 Bearer Token 设置 RANCHER_TOKEN。RANCHER_URL 设置为 rancher server url,注意不要尾部的
/
。在能访问 rancher server 的任意主机上运行本脚本
单个集群保存
以上两种方法均是通过 Rancher API 去保存 kubeconfig 配置文件。Rancher API 请求是通过 Rancher server 与 Rancher agent 创建的 websocket 双向隧道去访问的 K8S 集群,如果 Rancher server 与 Rancher agent 的连接出现异常,那么这个时候是无法通过 Rancher API 去保存 kubeconfig 文件。如果早期没有备份 kubeconfig 文件,在 Rancher server 与 Rancher agent 的连接出现异常后,Rancher UI 将无法复制 kubeconfig 配置文件。这个时候到每个集群上去手动保存 kubeconfig 文件,操作方法参考:恢复丢失的 kubecfg 文件。