站点图标 Linux-技术共享

AKS 的網路拓撲和連線能力考量

設計考量

私人叢集

AKS 叢集 IP 可見度可以是公用的,也可以是私用的。 私人叢集會透過私人 IP 位址公開 Kubernetes API,但不會透過公用 IP 位置來公開。 此私人 IP 位址會透過私人端點在 AKS 虛擬網路中顯示出來。 Kubernetes API 不應透過其 IP 位址來存取,而是透過其完整功能變數名稱 (FQDN) 來存取。 從 Kubernetes API FQDN 到其 IP 位址的解析通常會由 Azure 私人 DNS 區域來執行。 此 DNS 區域可由 Azure 在 AKS 節點資源群組中建立,或是您也可以指定現有的 DNS 區域。

遵循經證實的企業規模做法,Azure 工作負載的 DNS 解析是由部署在連線訂閱中的集中式 DNS 伺服器所提供,可以是在中樞虛擬網路中,也可以是在連接到 Azure 虛擬 WAN 的共用服務虛擬網路中。 這些伺服器會使用 Azure DNS (IP 位址 168.63.129.16) 來有條件地解析 Azure 特定且公共的名稱,並使用企業的 DNS 伺服器來解析私人名稱。 不過,這些集中式 DNS 伺服器無法解析 AKS API FQDN,直到它們與位 AKS 叢集所建立的 DNS 私人區域連線為止。 由於區域名稱前面會加上隨機的 GUID,因此每個 AKS 都會有唯一的 DNS 私人區域。 因此,針對每個新的 AKS 叢集,其對應的私人 DNS 區域應連線至中央 DNS 伺服器所在的虛擬網路。

所有虛擬網路都應該設為使用這些中央 DNS 伺服器進行名稱解析。 但是,如果 AKS 的虛擬網路設定為使用中央 DNS 伺服器,而且這些 DNS 伺服器皆尚未連線至私人 DNS 區域,則 AKS 節點將無法解析 Kubernetes API 的 FQDN,AKS 叢集將會建立失敗。 AKS 虛擬網路應設為在叢集建立之後,才使用中央 DNS 伺服器。

一旦建立起叢集之後,DNS 私人區域與部署中央 DNS 伺服器的虛擬網路之間就會建立連線。 AKS 虛擬網路也已設為使用連線訂閱內的中央 DNS 伺服器,AKS Kubernetes API 的系統管理員存取會遵循此流程:

 注意

本文中的影像反映了使用傳統的中樞和輪輻連接模型的設計。 企業規模的登陸區域可以選擇使用虛擬 WAN 連線模型,在其內中央 DNS 伺服器會在一個連線到虛擬 WAN 中樞的共用服務虛擬網路內。

  1. 系統管理員將會解析 Kubernetes API 的 FQDN。 內部部署 DNS 伺服器會將要求轉送到授權伺服器:Azure 中的 DNS 解析器。 這些伺服器會將要求轉送到 Azure DNS 伺服器 (168.63.129.16),並從 Azure 私人 DNS 區域取得 IP 位址。
  2. 在解析 IP 位址之後,Kubernetes API 的流量會從內部部署路由傳送至 VPN 或 Azure 中的 ExpressRoute 閘道,視連線模型而定。
  3. 私人端點會在中樞虛擬網路中引進 /32 路由,因此 VPN 和 ExpressRoute 閘道會將流量直接傳送到部署在 AKS 虛擬網路中的 Kubernetes API 私人端點。

從應用程式使用者到叢集之間的流量

傳入的 (輸入) 控制器可用來公開在 AKS 叢集中執行的應用程式。

輸入控制器可以公開具有公用或私人 IP 位址的應用程式和 API。

應用程式流量可能會來自內部部署或公用網際網路。 下圖描述一個範例,其中 Azure 應用程式閘道設為從內部部署和從公用網際網路反向 Proxy 連線到叢集。

來自內部部署的流量會遵循上圖中標註為藍色編號的流程。

  1. 用戶端會使用在連線訂閱的 DNS 伺服器或內部部署 DNS 伺服器,來解析指派給應用程式的 FQDN。
  2. 在將應用程式 FQDN 解析為 IP 位址之後 (應用程式閘道的私人 IP 位址),流量會透過 VPN 或 ExpressRoute 閘道路由輸送。
  3. 閘道子網路中的路由被設定為將要求傳送至 Web 應用程式防火牆。
  4. Web 應用程式防火牆會將有效要求傳送給在 AKS 叢集中執行的工作負載。

此範例中的 Azure 應用程式閘道可以部署在與 AKS 叢集相同的訂閱中,因為其設定與 AKS 中部署的工作負載密切相關,因此由相同的應用程式小組管理。 來自網際網路的存取時會遵循上圖中標註為綠色編號的流程。

  1. 來自公用網際網路的用戶端會使用 Azure 流量管理員來解析應用程式的 DNS 名稱。 也可以使用其他的全域負載平衡技術,例如 Azure Front Door。
  2. 應用程式公用 FQDN 會由流量管理員解析為應用程式閘道的公用 IP 位置,讓客戶端能透過公用網路存取。
  3. 應用程式閘道將會存取部署在 AKS 中的工作負載。

 注意

這些流程僅適用於 Web 應用程式。 非 Web 應用程式不在本文的討論範圍內,其可透過中樞虛擬網路中的 Azure 防火牆來公開,或是在使用虛擬 WAN 連線模型的情況下,透過安全虛擬中樞來公開。

或者,以 Web 為基礎的應用程式可以設為需穿過連線訂閱中的 Azure 防火牆以及 AKS 虛擬網路中的 WAF。 這種方法的優點是能提供更多的保護,例如使用 Azure 防火牆智慧型篩選來去除來自網際網路上已知惡意 IP 位址的流量。 不過,它也有一些缺點。 例如,在公開應用程式時,會失去原始的用戶端 IP 位址,使防火牆和應用程式小組之間需要進行額外的協調。 這是因為 Azure 防火牆中需要目的地網路位址轉譯 (DNAT) 規則。

從 AKS Pod 到後端服務的流量

在 AKS 叢集中執行的 Pod 可能會需要存取諸如 Azure 儲存體、Azure SQL 資料庫或 Azure Cosmos DB NoSQL 資料庫等的後端服務。 虛擬網路服務端點和 Private Link 可以用來保護這些 Azure 受控服務的連線能力。

如果您使用的是 Azure 私人端點來處理後端流量,則可以使用 Azure 私人 DNS 區域來執行對於 Azure 服務的 DNS 解析。 由於整個環境的 DNS 解析器都位於中樞虛擬網路 (或共用服務虛擬網路,如果使用的是虛擬 WAN 連線模型),因此這些私人區域應該在連線訂閱中建立。 若要建立起解析私用服務 FQDN 所需的 A 記錄,您可以將連線訂閱中的私人 DNS 區域 (位於連線訂閱內) 與私人端點 (位於應用程式訂閱內) 產生關聯。 這項作業需要這些訂閱中的特定權限。

您也可以手動建立 A 記錄,但是在安裝程式中將私人 DNS 區域與私人端點結果相關聯,較不容易出現設定錯誤。

藉由私人端點公開,從 AKS Pod 至 Azure PaaS 服務的後端連線將遵循下列順序:

  1. AKS Pod 會使用連線訂閱內的中央 DNS 伺服器 (定義為 AKS 虛擬網路中的自訂 DNS 伺服器),來解析 Azure 平台即服務 (PaaS) 的 FQDN。
  2. 解析後的 IP 會是私人端點的私人 IP 位址,可直接從 AKS Pod 存取。

AKS Pod 和私人端點之間的流量預設上不會通過中樞虛擬網路 (或是安全虛擬中樞,如果使用的是虛擬 WAN 的話) 中的 Azure 防火牆,即使 AKS 叢集設為以 Azure 防火牆篩選輸出。 這是因為私人端點會在部署 AKS 的應用程式虛擬網路的子網路中建立 /32 路由。

設計建議

退出移动版