rancher 創(chuàng)建的集群獲取kubeconfig---不通過rancher頁面的獲取方式

rancher創(chuàng)建的集群,可以從rancher server的頁面上直接獲取集群的kubeconfig 文件;這時候所有的請求都會從rancher api-server 轉(zhuǎn)發(fā)一下,也方便做審計。

考慮一下異常的場景,recher-server異常,這個時候,想要直接訪問創(chuàng)建的集群,怎么處理?

方案一:使用官方腳本生成

#!/bin/bash

help ()
{
   echo  ' ================================================================ '
   echo  ' --master-ip: 指定 Master 節(jié)點 IP,任意一個 K8S Master 節(jié)點 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 '恢復(fù)成功,執(zhí)行以下命令測試:'
   echo ''
   echo "kubectl --kubeconfig kubeconfig_admin.yaml get nodes"
 else
   echo "kubeconfig 恢復(fù)失敗。"
 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 '恢復(fù)成功,執(zhí)行以下命令測試:'
   echo ''
   echo "kubectl --kubeconfig kubeconfig_admin.yaml get nodes"
 else
   echo "kubeconfig 恢復(fù)失敗。"
 fi
fi

腳本來源
集群管理員指南 - 恢復(fù) Kubectl 配置文件 - 《Rancher 2.4.8 中文文檔》 - 書棧網(wǎng) · BookStack

將生成的腳本 拷貝到 /root/.kube/config就可以直接使用了

方案二:直接使用kubecfg-kube-node.yaml權(quán)限,有限制。

kubectl --kubeconfig /etc/kubernetes/ssl/kubecfg-kube-node.yaml  get no 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容