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