承接上文,之前讲的两种方法都是使用一台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

图片14.png

这种在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中,已经能看到文件了

图片15.png


接下来就是传统的linux ssh方法了,修改private key的文件属性,然后直接用ssh连接

ssh -i id_rsa azureuser@10.199.1.7

图片16.png

登录完成

第二种:通过特权容器直接访问

最后一种方法可以说是种野路子,也就是通过特权容器的方式直接来访问到pod所在的节点,这种方法甚至不需要private key, 当然还是需要能在集群内运行pod的权限,本身这种方法其实不是很推荐,因为要跑特权容器,权限给的太大了,算是个备用的方法吧

可以直接通过kube-enter这个脚本来创建特权容器

wget https://raw.githubusercontent.com/andyzhangx/demo/master/dev/kubectl-enter

图片17.png

顺手给个执行权限

chmod a+x ./kubectl-enter

然后先获取下node的名称,因为要在被访问的node上创建特权容器

kubectl get no

图片18.png


脚本使用也可以简单,直接后边加上node名称即可

./kubectl-enter aks-systempool-26624565-vmss000000

可以看到直接就进入到交互式界面,可以运行命令了,不需要private key

图片19.png

在集群里也可以看到会有个pod在运行

图片20.png

并且是个特权容器

图片21.png

生产环境最好还是把运行这种容器的权限禁掉比较好

以上就是总结的几个SSH到集群节点的办法