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

部署AKO (Avi Kubernetes Operator) 前,除了要先把NSX Advanced Load Balancer (Avi Networks) 相關構件先配置好之外,需要預先建立好IPAM (IP Address Management) 以及 DNS (Domain Name Service) 的設定。為什麼要這樣做?先抓一下前兩篇網誌內也有的展示圖如下,IPAM / DNS 在AKO環境內需要解決兩個問題:

  • Virtual IP管理,包含了自動配置IP給新服務,紀錄有哪些IP已經被用掉…等等
  • 就Ingress服務,將各個Virtual Service的VIP與Hostname (FQDN) 進行對應,並回應終端用戶的詢問

也就是說,當應用管理者建立一個新的LB Service 要求,如果沒有指定IP,IPAM機制會自動由指定範圍內配發一個VIP。如果有指定IP,IPAM會確認這個IP有在可配發的範圍內,而且沒有其他人使用到。而如果應用管理者的要求是Ingress,此時除了IPAM會配發地址給此Ingress透過Shard機制共享的Virtual IP外,也會由DNS機制自動回應關於這個Ingress Host的詢問,回應對應的Virtual IP。本系列網誌前面的文章我貼過AKO的運作架構如下,裡面的第4個與第5個步驟,就是由IPAM配發Virtual IP,並登記至DNS的機制。

同樣另一張圖內,當管理者已經建立一個使用Ingress的應用,當用戶要連到這個服務時,首先先詢問DNS,取得這個服務的VIP(下圖步驟1)。接著後續用戶端應用程式如瀏覽器便會連往在Avi服務引擎內的對應Virtual Service,取得實際應用功能。

流程如上面所述。接下來我們要回應兩個問題:首先,這個DNS / IPAM的機制要怎麼做呢?企業可能會在不同的環境內建置Kubernetes搭配AKO,於各環境內,DNS / IPAM的選擇包括了

  • 採用基礎的Avi原生機制,也就是Avi內建的DNS / IPAM服務
  • 整合有合作的第三方企業軟體,Avi目前有整合的是Infoblox
  • 整合公有雲平台。在各個雲平台包含AWS / Azure / GCP都有內建的IPAM / DNS對應機制,當Avi建置在這些環境內時,可以直接使用相關機制
  • 整合私有雲平台,簡而言之就是Openstack內的DNS / IPAM機制

那下面我們來討論一下最常用的在vSphere環境內,採用基礎的Avi原生機制的部署流程。不做太詳細說明,但須要建立的包含了

1. 建立IPAM Profile

請參考下圖我建立了一個叫做TKGM-ipam的profile,指定採用Avi Vantage IPAM (原生IPAM機制)。特別要強調的是這個Profile內要選擇對應到哪個”Cloud”內的那個”Usable Network”,本舉例內選擇的是TKGM-Workload-vlan4014這個Port Group。

上面這個配置的意思,就是代表這個IPAM管理的可配發地址範圍,是在TKGM-Workload-vlan4014這個Network內,透過DHCP或是IP-Pool指定的地址範圍。在我的網路配置檔內,這裡利用了IP Pool的方式配置了172.20.14.231~172.20.14.250,這也定義了IPAM可以管理的可配發地址範圍。

2. 建立DNS Profile

另外也要建立一個TKGM-dns的profile,型態是原生的Avi DNS,且這個profile管理tkgm.sysage.com這個domain。在後續的步驟,我們會到企業本身的DNS去,將tkgm.sysage.com委派 (delegate) 給Avi來進行回應。

3. 將上述IPAM / DNS Profile關聯到Cloud

在我們已經建立的Cloud,這邊是一個標準的vCenter Cloud環境內,把前面配置的IPAM / DNS Profile關聯進來。此時,

  • 此Cloud裡面建立的Virtual Service,Virtual IP除了自行指定外,也可透過IPAM自動進行配發
  • 此Cloud裡面建立的Virtual Service的Application Domain Name與VIP會在DNS內建立紀錄,並由後面步驟指定的DNS服務內提供用戶查詢
  • 下列圖示內的State Based DNS Registration一般建議勾選,這代表Avi會依據各個Virtual Service的狀態來異動DNS紀錄。比如說如果目前一個Virtual Service失效了(比如說後面Server Pool內的伺服器都出了問題),此時Avi會自動將這個Virtual Service的Application Domain Name / VIP紀錄撤下,待服務回復後再重新加入。

4. 在Avi內建立DNS Virtual Service

下圖內我們建立了一個名叫TKGM-DNS-VS的Virtual Service,採用DNS型態的Application Profile,指定了Virtual IP為172.20.14.230,並且同時服務由TCP/UDP 53來的DNS Request。

特別Highlight一下這邊不需要設定Pool,因為Avi的DNS只需要回應自己管理的域名,後面步驟會與前面的DNS Service整合,不需要轉送到其他外部DNS做進一步詢問。

5. 指定上述的Virtual Service與DNS Profile

在此配置內我們告知Avi,第4步驟內所建立的TKGM-DNS-VS要來負責回應前面IPAM/DNS profile/Cloud內配置的域名 / IP地址對應。當有DNS Request詢問此Avi內建的DNS服務時,會到後端的DNS/IPAM profile來查詢記錄。

6. 在企業DNS內,將Avi DNS管理的域名進行委派

基本上,應該不會有任何一家企業,為了要使用上述功能,結果把整個企業的DNS全部交給Avi管吧。企業勢必會有自行管理的DNS方案,終端用戶連線時是到這個現有DNS方案內進行查詢。

因此這邊我們要做的是委派 (Delegation) 的設定。下圖內是在Windows Server內的DNS Manager,企業網域是sysage.com,但我們把次網域tkgm.sysage.com委派給Avi自己建置的DNS 172.20.14.230。

因此,比如說用戶現在要連到最前面圖內的acme-fitness.tkgm.sysage.com時,流程會是

  • 用戶的瀏覽器往企業的DNS內詢問acme-fitness.tkgm.sysage.com的IP
  • 企業DNS已經將tkgm.sysage.com委派給AVI的DNS服務了,因此企業DNS會過來172.20.14.230詢問acme-fitness.tkgm.sysage.com的IP
  • 在這幾篇說明內,當ACME-Fitness這個應用建立了Ingress,AKO會告知Avi配置對應的Virtual Service,且透過IPAM/Shard機制派送對應的Virtual IP。於前面討論的IPAM/DNS機制,acme-fitness.tkgm.sysage.com對應到172.20.14.234,且自動記錄於Avi DNS內。因此,Avi DNS會回應上述對應的Virtual IP。
  • 用戶瀏覽器取得了Virtual IP,再進行後續的應用連接。

先說明到這邊。這幾篇的討論希望讓大家看到,NSX Advanced Load Balancer內AKO搭配IPAM/DNS的機制,能夠讓Kubernetes內應用遞送的地址與域名管理完全無需手動配置。在一個需要敏捷開發、應用會大量變動的環境,上述的機制我相信對整體自動化流程是極有幫助的。