这次继续介绍AKS的一些技巧,一般而言,各家的托管K8S master都是不允许用户登录的,当然也有个别例外,有的云确实会提供master也可以由用户自己管理的集群,不过绝大部分的master对用户来说都是不可见的,这样好处其实也很明显,一是master费用一般都不需要客户承担,二是管理之类的工作也由厂商自行完成

但对于集群的node来说,基本还是可以由用户自行管理的,一般也不会完全禁止用户登录,而有些情况下要完成一些操作可能还必须要登录node,比如一些集群的排错等

对于AKS来说,也是不禁止用户登录node的,但是默认情况下,AKS集群不会直接提供用户可登录的公网地址,微软在这方面其实添加了一些保护机制,避免集群直接暴露在公网下,AKS底层可以由虚机支持,也可以由VMSS提供,一般来说都是建议使用VMSS的,因为可以添加多个节点池,管理也方便些,创建AKS集群时,其实会自动创建个带有公网IP的负载均衡器,并且配置出站规则,以作为集群访问公网的出口,但是你会发现,这个负载均衡器,不会像一般的VMSS一样自动配置到各个节点的NAT规则,这也就是之前讲到的对于集群节点的保护

而如果想登录到node节点的话,可以由几种场景和方法,首先是网络

网络

第一种方式就是参考之前的博客,把AKS部署到一个现有子网里,这也子网中如果有一些其他机器的话,就可以利用这些机器直接访问集群的节点,当然即使没部署到现有子网,依然可以部署一台服务器作为跳转机来访问节点

身份

网络方面确保能联通之后,剩下的就是身份的问题了,这方面其实也有些讲究,在创建AKS集群时,AKS集群本身支持Linux和Windows作为节点,当然一般我们讨论的都是Linux节点,AKS不允许使用密码创建集群,只能用密钥对的方式,用户名则默认会是azureuser,如果是从portal创建的话,那么是没有机会选择用户名秘钥对之类的选项的,所以如果想使用特定的用户名和密钥对,需要使用CLI来创建集群

场景一:使用特定用户名和密钥对创建集群

az aks create -g garrickmeng -n MyManagedCluster --node-osdisk-size 100 --admin-username mengxiyuan --kubernetes-version 1.18.10 --location chinanorth2 --network-plugin kubenet --node-count 1 --node-vm-size Standard_DS2_v2 --nodepool-name systempool --pod-cidr 10.120.0.0/16 --service-cidr 10.110.0.0/16 --ssh-key-value 'C:\Users\garrick.meng\.ssh\id_rsanew.pub' --vm-set-type VirtualMachineScaleSets  --v`net-subnet-id $subnetid --dns-service-ip 10.110.0.10 --dns-name-prefix mxyaks

通过--admin-username和--ssh-key-value可以指定特定的用户名和秘钥

通过CLI创建集群之后,接下来就可以尝试登录了,我们在这个子网中已经提前有VM作为跳转机了,直接拿来用就可以了

在访问之前,我们需要获取到集群节点的IP,这点其实可以用CLI来获取,首先先获取VMSS的名称

$vmssname=az vmss list --query "[?contains(name, 'system')].name" -o tsv

图片5.png

然后获取VMSS所在的资源组,这些都是后续需要用到的

$vmsrg=az vmss list --query "[?contains(name, 'system')].resourceGroup" -o tsv

图片6.png

接下来就可以通过vmss的网卡地址获取到集群节点的信息了

az vmss nic list -g $vm***g --vmss-name $vmssname --query "[].ipConfigurations[0].privateIpAddress" -o tsv

图片7.png

准备工作就绪,接下来我们直接把创建集群时使用的密钥对里的私钥拷贝到跳转机上,直接使用SSH连接即可

ssh mengxiyuan@10.199.1.7 -i "C:\Users\mengxiyuan\.ssh\id_rsanew"

登录完成

图片8.png

可以看到,确实是ubuntu的系统

图片9.png


场景二:更新集群的密钥对

而如果在创建集群时是从Portal创建,不清楚集群的密钥对是什么的时候,可以在创建后自己更新密钥对

如果直接SSH集群,会看到认证失败的提示,所以可以把密钥对更新一下,首先获取一些基础的信息

vmssname=$(az vmss list --query "[?contains(name, 'system')].name" -o tsv)

vmsrg=$(az vmss list --query "[?contains(name, 'system')].resourceGroup" -o tsv)

然后通过extension将public key放到ssh目录下,这样就把自己的密钥对放进集群的node了

az vmss extension set  \

    --resource-group $vm***g \

    --vmss-name $vmssname \

    --name VMAccessForLinux \

    --publisher Microsoft.OSTCExtensions \

    --version 1.4 \

--protected-settings "{\"username\":\"azureuser\", \"ssh_key\":\"$(cat ~/.ssh/id_rsa.pub)\"}"

图片11.png


az vmss update-instances --instance-ids '*' \

    --resource-group $vm***g \

    --name $vmssname

图片12.png

之后将密钥对拷贝到跳转机,直接SSH集群

ssh azureuser@10.199.1.7 -i "C:\Users\mengxiyuan\.ssh\id_rsa_linux"

登录完成

图片13.png

以上是通过跳转机登录集群node的方式,后边还会介绍两种不需要跳转机的