Rancher K8S集群怎样恢复丢失的kubeconfig配置文件

本文主要介绍"Rancher K8S集群如何恢复丢失的kubeconfig配置文件",希望能够解决您遇到有关问题,下面我们一起来看这篇 "Rancher K8S集群如何恢复丢失的kubeconfig配置文件" 文章。

分析 Rancher UI 生成的 kubeconfig 文件可以发现,第一个server对应的是 Rancher Server 的 url 或者 IP。当 kubectl 访问 K8S API SERVER 的时候,请求是先发送到 Rancher,然后再通过 cluster agent 转发给 K8S API SERVER。

Rancher K8S集群怎样恢复丢失的kubeconfig配置文件

在 Rancher v2.2.2 以前的版本,Rancher UI 生成的 kubecfg 文件中只设置了一个server。从 Rancher v2.2.2 开始,从 Rancher UI 创建的集群默认开启授权集群访问地址。创建好集群后 Rancher UI 生成的 kubecfg 文件中将显示多个 master 节点 IP 对应的server。

Rancher K8S集群怎样恢复丢失的kubeconfig配置文件 Rancher K8S集群怎样恢复丢失的kubeconfig配置文件

因此,Rancher v2.2.2以及之后版本通过 Rancher UI 创建的集群,如果 Rancher Server 无法访问,那么可以通过kubectl --kubeconfig=xxx --context=xxx来切换server,但是前提是需要提前从 Rancher UI 保存 kubeconfig 文件。

如果 Rancher Server 无法访问,对于Rancher v2.2.2之前的版本或者未提前保存 kubeconfig 的,可通过以下脚本找回kube-admin配置文件。

注意: 以下脚本需要在业务集群上执行,任意一个节点即可。保存以下文本为restore-kube-config.sh

#!/bin/bash

help ()
{
   echo  ' ================================================================ '
   echo  ' --master-ip: 指定 Master 节点 IP,任意一个 K8S Master 节点 IP 即可。'
   echo  ' 使用示例:bash restore-kube-config.sh --master-ip=1.1.1.1 '
   echo  ' ================================================================'
}

case "$1" in
   -h|--help) help; exit;;
esac

if [[ $1 == '' ]]; then
   help;
   exit;
fi

CMDOPTS="$*"
for OPTS in $CMDOPTS;
do
   key=$(echo ${OPTS} | awk -F"=" '{print $1}' )
   value=$(echo ${OPTS} | awk -F"=" '{print $2}' )
   case "$key" in
       --master-ip) K8S_MASTER_NODE_IP=$value ;;
   esac
done

# 获取 Rancher Agent 镜像
RANCHER_IMAGE=$( docker images --filter=label=io.cattle.agent=true |grep 'v2.' | \
grep -v -E 'rc|alpha|<none>' | head -n 1 | awk '{print $3}' )

if [[ -d /etc/kubernetes/ssl ]]; then
 K8S_SSLDIR=/etc/kubernetes/ssl
else
 echo '/etc/kubernetes/ssl 目录不存在'
 exit 1
fi

CHECK_CLUSTER_STATE_CONFIGMAP=$( docker run --rm --entrypoint bash --net=host \
-v $K8S_SSLDIR:/etc/kubernetes/ssl:ro $RANCHER_IMAGE -c '\
if kubectl --kubeconfig /etc/kubernetes/ssl/kubecfg-kube-node.yaml \
-n kube-system get configmap full-cluster-state | grep full-cluster-state > /dev/null; then \
echo 'yes'; else echo 'no'; fi' )

if [[ $CHECK_CLUSTER_STATE_CONFIGMAP != 'yes' ]]; then

 docker run --rm --net=host \
 --entrypoint bash \
 -e K8S_MASTER_NODE_IP=$K8S_MASTER_NODE_IP \
 -v $K8S_SSLDIR:/etc/kubernetes/ssl:ro \
 $RANCHER_IMAGE \
 -c '\
 kubectl --kubeconfig /etc/kubernetes/ssl/kubecfg-kube-node.yaml \
 -n kube-system \
 get secret kube-admin -o jsonpath={.data.Config} | base64 --decode | \
 sed -e "/^[[:space:]]*server:/ s_:.*_: \"https://${K8S_MASTER_NODE_IP}:6443\"_"' > kubeconfig_admin.yaml
 
 if [[ -s kubeconfig_admin.yaml ]]; then
   echo '恢复成功,执行以下命令测试:'
   echo ''
   echo "kubectl --kubeconfig kubeconfig_admin.yaml get nodes"
 else
   echo "kubeconfig 恢复失败。"
 fi

else

 docker run --rm --entrypoint bash --net=host \
 -e K8S_MASTER_NODE_IP=$K8S_MASTER_NODE_IP \
 -v $K8S_SSLDIR:/etc/kubernetes/ssl:ro \
 $RANCHER_IMAGE \
 -c '\
 kubectl --kubeconfig /etc/kubernetes/ssl/kubecfg-kube-node.yaml \
 -n kube-system \
 get configmap full-cluster-state -o json | \
 jq -r .data.\"full-cluster-state\" | \
 jq -r .currentState.certificatesBundle.\"kube-admin\".config | \
 sed -e "/^[[:space:]]*server:/ s_:.*_: \"https://${K8S_MASTER_NODE_IP}:6443\"_"' > kubeconfig_admin.yaml
 
 if [[ -s kubeconfig_admin.yaml ]]; then
   echo '恢复成功,执行以下命令测试:'
   echo ''
   echo "kubectl --kubeconfig kubeconfig_admin.yaml get nodes"
 else
   echo "kubeconfig 恢复失败。"
 fi
fi

关于 "Rancher K8S集群如何恢复丢失的kubeconfig配置文件" 就介绍到这。希望大家多多支持编程宝库

怎么利用区块链技术与数字货币赚钱:本文主要介绍"如何利用区块链技术与数字货币赚钱",希望能够解决您遇到有关问题,下面我们一起来看这篇 "如何利用区块链技术与数字货币赚钱" 文章。   说道赚钱风险和回报往往成正比,高风险和高回报,低风险和低 ...