1. 程式人生 > >利用容器逃逸實現遠端登入k8s叢集節點

利用容器逃逸實現遠端登入k8s叢集節點

某天, 某魚說要吃瞄, 於是...... 李國寶:邊緣計算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 -