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

59次阅读
没有评论

共计 2941 个字符,预计需要花费 8 分钟才能阅读完成。

这篇文章给大家介绍 Rancher K8S 集群怎样恢复丢失的 kubeconfig 配置文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

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

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

因此,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 配置文件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计2941字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)