天天看點

SSH AKS叢集節點的幾種方法(一)

這次繼續介紹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

SSH AKS叢集節點的幾種方法(一)

然後擷取VMSS所在的資源組,這些都是後續需要用到的

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

SSH AKS叢集節點的幾種方法(一)

接下來就可以通過vmss的網卡位址擷取到叢集節點的資訊了

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

準備工作就緒,接下來我們直接把建立叢集時使用的密鑰對裡的私鑰拷貝到跳轉機上,直接使用SSH連接配接即可

ssh [email protected] -i "C:\Users\mengxiyuan\.ssh\id_rsanew"

登入完成

SSH AKS叢集節點的幾種方法(一)

可以看到,确實是ubuntu的系統

場景二:更新叢集的密鑰對

而如果在建立叢集時是從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)\"}"

SSH AKS叢集節點的幾種方法(一)

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

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

    --name $vmssname

SSH AKS叢集節點的幾種方法(一)

之後将密鑰對拷貝到跳轉機,直接SSH叢集

ssh [email protected] -i "C:\Users\mengxiyuan\.ssh\id_rsa_linux"

SSH AKS叢集節點的幾種方法(一)

以上是通過跳轉機登入叢集node的方式,後邊還會介紹兩種不需要跳轉機的

繼續閱讀