AKS網絡模型介紹及創建技巧

這幾篇準備開始寫一寫關於AKS的一些內容,首先來說下AKS是啥,簡單來說AKS=Azure託管K8S集羣,知道這點基本就已經夠了,AKS的創建之類的其實步驟都很簡單,沒什麼必要單獨拿出來講,這幾篇主要是講一些常用的小技巧,首先要講的其實是關於網絡方面的

K8S的網絡模型說實話比單純的雲網絡還是要複雜一些的,最常用的基本就是flannel和calico,一般來說各個雲廠商在託管的K8S裏基本都會提供最少兩種的網絡模型,大部分都是根據各個雲廠商情況進行定製的,Azure在這點上也不例外,Azure提供的網絡模型主要有兩種:

1、Kubenet

2、AzureCNI

kubenet 從 Azure 虛擬網絡子網獲取 IP 地址。 Pod 接收從邏輯上不同的地址空間到節點的 Azure 虛擬網絡子網的 IP 地址。 然後配置網絡地址轉換 (NAT),以便 Pod 可以訪問 Azure 虛擬網絡上的資源。 流量的源 IP 地址通過 NAT 轉換爲節點的主 IP 地址。 這種方法大大減少了需要在網絡空間中保留供 Pod 使用的 IP 地址數量。

簡單來說,kubenet網絡模型下,pod的IP是一個虛擬的IP,不會從虛擬網絡裏獲取,也不會佔用IP資源,所以IP規劃會比較簡單,也不至於出差IP不夠的情況,但是跨node間的pod通信是需要藉助UDR來實現的,會有一些網絡開銷,並且這種網絡模型也能支持calico的網絡策略,這點其實比較好,很多雲廠商的託管K8S集羣,較爲基礎的網絡插件都不支持網絡策略

圖片3.png

而Azure CNI則是相對高級一點的網絡模型

藉助 Azure 容器網絡接口 (CNI),每個 Pod 都可以從子網獲得 IP 地址,並且可供直接訪問。 這些 IP 地址在網絡空間中必須唯一,並且必須事先計劃。 每個節點都有一個配置參數來表示它支持的最大 Pod 數。 這樣,就會爲每個節點預留相應的 IP 地址數。 使用此方法需要經過更詳細的規劃,並且經常會耗盡 IP 地址,或者在應用程序需求增長時需要在更大的子網中重建羣集。 

Azure CNI的網絡模型中,pod是會實際佔用虛擬網絡的IP地址的,這點如果pod比較多的話很容易把地址空間佔滿,所以會比較危險,但是相對的pod通信也不需要經過UDR,這種網絡模型不僅支持calico網絡策略,還能支持Azure網絡策略

圖片4.png

對於新手來說,其實kubenet就完全足夠了

以上相當於對於AKS網絡模型的一點簡介,之後是一些小技巧

一:如何在kubenet網絡模型下使用現有的子網

在Portal創建kubenet類型的集羣時,其實沒辦法選擇部署到哪個虛擬網絡裏,感覺好像是這東西不是部署在虛擬網絡裏一樣,但是其實創建後你會發現其實會自動創建個新的虛擬網絡,那如果想把集羣部署到現有子網中應該怎麼做呢?這點其實通過CLI和PowerShell都可以做到

PowerShell命令

New-AzAks -ResourceGroupName Garrickmeng -Name mxyAKS -NodeCount 1 -NodeVmSetType VirtualMachineScaleSets -NodeV`netSubnetID $subnet.id -NodeMaxPodCount 150 -NodeVmSize Standard_DS2_v2 -EnableRBAC -NetworkPlugin kubenet -Location chinanorth2 -LinuxProfileAdminUserName mengxiyuan -DnsNamePrefix mxyakstest -KubernetesVersion 1.18.10 -NodeName mxyaksnode -SshKeyValue "C:\Users\garrick.meng\.ssh\id_rsanew.pub"

在創建的過程中其實可以指定NodeV`netSubnetID,至於如何獲取這個ID,可以參考下邊的做法

$subnetid=az network v`net subnet list --resource-group garrickmeng --v`net-name mxy-v`net --query "[?(name == 'mxy')].id" -o tsv

其實比較推薦的還是用CLI創建,因爲PowerShell命令感覺參數不是很多,像service CIDR這些參數居然沒有

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\mxy00\.ssh\id_rsa2.pub' --vm-set-type VirtualMachineScaleSets  --v`net-subnet-id $subnetid --dns-service-ip 10.110.0.10 --dns-name-prefix mxyaks

CLI基本也是類似,只需要指定好subnetid即可

二:如何在不同子網部署node pool

在Portal操作的時候,其實可以直接創建新的node pool,node pool會決定這批node所處的網絡,K8S版本,size等等,所以還是比較重要的,尤其是當網絡IP消耗較多,需要擴容時,直接擴子網IP是做不了的,但是可以添加新的子網,在Portal創建新的node pool的時候其實沒有地方能選擇部署到哪個子網,默認就是部署到當前的集羣子網裏,如果想單獨部署到別的子網,可以用以下方法

先獲取子網ID

$nodesubnetid=az network v`net subnet list --resource-group garrickmeng --v`net-name mxy-vnet --query "[?(name == 'mxy2')].id" -o tsv

az aks nodepool add --cluster-name MyManagedCluster --name userpool --resource-group garrickmeng --enable-node-public-ip --kubernetes-version 1.18.10 --mode user --node-count 1 --node-osdisk-size 80 --node-vm-size Standard_DS2_v2 --os-type Linux --v`net-subnet-id $nodesubnetid

在CLI裏其實可以指定subnet id,這樣就可以部署到不同字網了

感覺現在portal的一些操作還是不太夠,爲了實現目的,只能用命令來做了

圖片2.png



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章