利用容器逃逸實現遠端登入k8s叢集節點
阿新 • • 發佈:2021-01-22
某天,
某魚說要吃瞄,
於是......
李國寶:邊緣計算k8s叢集SuperEdge初體驗
zhuanlan.zhihu.com
圖示
照著上一篇文章來說,我這邊邊緣計算叢集有一堆節點。
每個節點都在不同的網路環境下。
他們的共同點都是可以訪問內網,
部分是某雲學生主機,
部分是跑在家庭網路環境下的虛擬機器,
甚至假設中還有一些是樹莓派之類的機器。
所以他們另一個共同點是,基本都沒有公網IP。
這樣一來,我要實現遠端登入到某些節點搞事的時候,
只有內網穿透這一條路子了。
使用frp進行內網穿透 - 少數派
sspai.com
圖示
https://github.com/fatedier/frp
github.com
內網穿透倒沒什麼,在公司使用這貨長期跑了兩年垮大洋穿透也很穩定。
只是...
只是...
只是...
要一臺臺機器配置一次,要維護一個穩定的公網伺服器作為橋接。
就是...麻煩了點。
然後想了下。
當前的kube superedge邊緣計算叢集本身就實現了4層和7層的內網穿透,
理論上直接使用它的能力也可以做到遠端登入的。
於是開始研究了一下怎麼實現在只有kubectl環境的機器上,
直接登入k8s容器叢集的node節點。
搜了一波之後首先發現的是這個專案。
A kubectl plugin to SSH into Kubernetes nodes using a SSH jump host Pod
github.com
看描述和需求來說,完全符合我的要求。
$ kubectl krew install ssh-jump
照著教程配置好外掛,裝好環境之後實踐了一下。
....
一切都好,就是連不上去。
蛋疼了...
接著又找了一波,發現了一個Redhat老哥的部落格。
A consistent, provider-agnostic way to SSH into any Kubernetes node
完美。
我想要的就是這個。
看了下外掛程式碼。luksa/kubectl-plugins看了下外掛程式碼。
https://github.com/luksa/kubectl-plugins/blob/master/kubectl-ssh
github.com
```bash
#!/usr/bin/env bash
set -e
ssh_node() {
node=$1
if [ "$node" = "" ]; then
node=$(kubectl get node -o name | sed 's/node\///' | tr '\n' ' ')
node=${node::-1}
if [[ "$node" =~ " " ]]; then
echo "Node name must be specified. Choose one of: [$node]"
exit 1
else
echo "Single-node cluster detected. Defaulting to node $node"
fi
fi
pod=$(
kubectl create -o name -