作者: Colin Jao 饒康立 – VMware資深技術顧問,主要負責VMware NSX產品線,目前致力於網路虛擬化、分散式安全防護技術與新應用遞送方案的介紹與推廣。

接下來我想要再用三篇網誌討論另一個進階的技術問題:在Kubernetes應用管理者配置LoadBalancer Service / Ingress時,AKO (Avi Kubernetes Operator) 內是如何配置前端Virtual Service VIP,以及對應的DNS / IPAM (IP Address Management) 管理機制。同樣地,這邊是在安裝AKO於K8S叢集前,需要預先考慮的準備動作。

為什麼要討論上述的機制?基本上當我們在Kubernetes內配置LoadBalancer Service以及 Ingress時,如果要做到整個流程的自動化,

  • 需要對應這些服務的Virtual IP可以自動配發,而非管理者自行手動配置
  • 如果採用Ingress,服務本身的FQDN (Fuall Qualified Domain Name) 應該要於企業DNS內能夠自行註冊,無需管理者手動建立

當然大家可能會說為什麼一定要這樣做,用傳統手動的方法有什麼不好?比如說以前手動配負載平衡器,自己選定Virtual IP,發內部申請加DNS紀錄,也可以啊。當然如此啦,但如果一切都手動…說認真的,企業也沒有用容器,使用Kubernetes的必要性啦,用實體機虛機所有事情自己配一配就可以了嘛。因此AKO本身的設計也在呼應這些Kubernetes自動化需求,相關必要的參數管理者只需要在K8S YAML檔內設定即可。

因此我們在使用AKO時,LB Service / Ingress的IP配置原則是這樣:

  • 安裝AKO前,K8S管理者要預先在Avi Controller內定義一段或數段的Virtual IP網路地址範圍
  • 當應用管理者啟動一個LoadBalancer Service,Avi Controller會自動於上述VIP網路範圍內,選擇一個VIP配置給此LoadBalancer Service。
  • 每個LoadBalancer Service會取得一個獨立的VIP。除了前述採用自動配置方法外,應用管理者可以在上述VIP範圍內,指定特定地址給此LoadBalancer Service使用
  • 對於Ingress,多個Ingress可共用一個VIP,但管理者亦可配置為每個Ingress自己獨立有自己的VIP
  • Ingress取得的VIP同樣由前述的VIP網路地址範圍內自動配發。在目前的AKO版本,VIP網路地址無法由應用管理者指定
  • AKO可透過自建或整合的DNS/IPAM機制,自動回應每個Ingress內對應的FQDN hostname與VIP紀錄。

我想上面這樣的說明用文字看不懂吧,以一個實際建置的展示環境來和大家說明。請參考下面兩張圖:

上述展示環境是一個實際在vSphere上運作的Tanzu Kubernetes Grid 1.3.1版搭配AKO環境,裡面總共跑了五個展示應用。上圖是網路地址與應用間的連動關係圖,下圖則是實際上在Avi Controller內的Virtual Service畫面。在這個配置出的展示環境內,

  • 我們預先配置了一段IP地址範圍:172.20.14.231~172.20.14.250,用來做Virtual IP派發用途
  • 在第一個應用Yelb內,對外服務型態為LoadBalancer Service。我們於配置Yaml檔內指定了Virtual IP為172.20.14.249,可取得這個指定的Virtual IP提供服務
  • 在第二個應用KUARD內,對外服務型態為LoadBalancer Service。我們於配置Yaml檔內不指定Virtual IP,此時Virtual Service建立時,於上述IP範圍內自動派發了一個Virtual IP (172.20.14.237)
  • 在第三個應用dashboard內,對外服務型態為Ingress。Ingress型態目前無法指定Virtual IP,且多個Ingress可共享一個IP地址。上圖內,dashboard.tkgm.sysage.com 這個ingress以Child-Service的機制,以多對1的方式掛載於172.20.14.233 (由上述網段自動配發) 所對應的這個Parent-Service下面
  • 在第四個應用dvwa內,對外服務型態為Ingress。同上, dvwa.tkgm.sysage.com 這個ingress以Child-Service的機制,以多對1的方式掛載在172.20.14.233對應的同一個Parent-Service下面
  • 在第五個應用acme-fitness內,對外服務型態為Ingress。此服務內,管理者指定要求VIP不要與其他服務共享。因此 acme-fitness.tkgm.sysage.com 這個ingress以Child-Service的機制,以1對1的方式掛載在172.20.14.234對應的這個Parent-Service下面
  • 此外,環境內有一個DNS服務(上圖內的項次8)。對於每個ingress服務,Avi的DNS服務可自動回應其FQDN以及配發VIP間的對應。比如說上圖的dvwa.tkgm.sysage.com對應到172.20.14.233,acme-fitness.tkgm.sysage.com對應到172.20.14.234,這樣的。

我相信到這邊大家應該已經看得頭昏腦脹。篇幅所限,下一篇網誌我想進一步說明AKO是如何翻譯應用管理者的LoadBalancer/Ingress等設定,到Avi Controller內進行Virtual Service配置。