承接上文,之前講的兩種方法都是使用一臺VM作爲跳板來訪問到集羣的NODE服務器,接下來介紹兩種不需要跳板機的方法,相對來說更簡單一些
第一種:通過pod直接ssh集羣
這種方法其實就是直接在集羣節點上創建個pod,然後進入到pod中進行ssh連接,因爲pod和node本身網絡就是相通的,所以可以直接訪問
首先下載kubeconfig
az aks get-credentials --resource-group garrickmeng --name noSSHManagedCluster
然後可以直接run一個debian的pod,其實別的也可以,只要image裏組件夠用就好
kubectl run -it --rm aks-ssh --image=debian
使用--it的方式在創建完pod後就會直接進入交互式界面,接下來就可以直接在pod裏安裝open-ssh
apt-get update && apt-get install openssh-client -y
這種在pod裏ssh的方式,和在跳轉機其實本質上並沒有區別,所以依然還是需要集羣的私鑰作爲身份驗證憑據的
所以接下來另開一個terminal,把private key copy到pod裏
$pod=kubectl get pod -l run=aks-ssh -o jsonpath='{.items[0].metadata.name}':/id_rsa
kubectl cp "C:\Users\garrick.meng\.ssh\id_rsa" $pod
回到pod中,已經能看到文件了
接下來就是傳統的linux ssh方法了,修改private key的文件屬性,然後直接用ssh連接
ssh -i id_rsa [email protected]
登錄完成
第二種:通過特權容器直接訪問
最後一種方法可以說是種野路子,也就是通過特權容器的方式直接來訪問到pod所在的節點,這種方法甚至不需要private key, 當然還是需要能在集羣內運行pod的權限,本身這種方法其實不是很推薦,因爲要跑特權容器,權限給的太大了,算是個備用的方法吧
可以直接通過kube-enter這個腳本來創建特權容器
wget https://raw.githubusercontent.com/andyzhangx/demo/master/dev/kubectl-enter
順手給個執行權限
chmod a+x ./kubectl-enter
然後先獲取下node的名稱,因爲要在被訪問的node上創建特權容器
kubectl get no
腳本使用也可以簡單,直接後邊加上node名稱即可
./kubectl-enter aks-systempool-26624565-vmss000000
可以看到直接就進入到交互式界面,可以運行命令了,不需要private key
在集羣裏也可以看到會有個pod在運行
並且是個特權容器
生產環境最好還是把運行這種容器的權限禁掉比較好
以上就是總結的幾個SSH到集羣節點的辦法