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

首先很快回憶一下在前篇網誌內,我們說明並簡單展示了要使用NSX來提供Kubernetes叢集南北向防護時,有三個步驟:

  1. 完成NSX與Kubernetes叢集內Antrea方案的整合配置。
  2. 於NSX Group內,配置需求之動態條件 (Criterion),抓取對應的K8S叢集南北向出入口資訊
  3. 將上述的群組放到NSX防火牆規則的來源或目的端(閘道或分散式防火牆均可)來啟用防護機制

這三個步驟中,第一點與之前網誌285~288討論的安裝配置流程完全一致,只是包含NSX / Antrea / 整合配置檔等均需要採用最新版本。而第三點則是與管理NSX防火牆的機制完全相同,應該大家都很熟了無須多言。因此在本篇內我想要著重於第二點,更詳細地說明在使用NSX來提供Kubernetes叢集南北向防護時,於群組 (Group) 內可以實際抓取到哪些資訊,並且能如何使用。

因此這裡和大家討論一下,Kubernetes叢集的南北向出入口資訊有哪些:

外部用戶如何連接至Kubernetes叢集內的服務(外對內)

在Kubernetes內,管理者要如何將一個業務暴露到外部,給一般用戶能夠連接使用呢?大概就是下列幾種方法如下圖:

  • 常見會搭配應用遞送服務,管理者可以透過配置Ingress (對應HTTP/S)、Load Balancer Service (L4)、或是Gateway (支持L4/L7) 等機制提供外部入口,如下圖上方Node 1部分所示
  • 而最基礎方式是直接在Kubernetes Node上以Destination-NAT方式,將Kubernetes Service直接暴露至外部的K8S Node介面IP地址與指定的Port。大家最熟悉的方式就是標準的Node Port Service,另外也有如Antrea支持的Node Port Local等,如下圖中間Node2 / Node 3 部分
  • 在特定的Routing模式,即各個Pod可以直接不做NAT,連接至底層網路的情境,Client端可以連接到Pod原始IP,如下圖Node 4。

下面我們可以看到於NSX群組內可以進行的動態條件配置。其中

  • K8S Ingress / K8S Service / K8S Gateway即可以一對一選擇管理者配置的應用遞送型態服務
  • K8S Node可以列出這個K8S Cluster內所有的Node IP,對應到Node Port 包含的所有IP地址。
  • 如果管理者有利用Antrea IP Pool來配置路由型態IP地址配置機制,可以直接採用Antrea IP Pool此條件進行選擇。

舉一個簡單的範例。在下圖內,我們在名稱為vanilla-124-cluster這個Kubernetes叢集內,於dvwa-ns這個namespace建立了一個ingress名稱叫做dvwa-ingress。外部負載平衡器配置了172.20.13.216這個IP出來:

此時我們在NSX內建立一個群組叫做vanilla-k8s-dvwa-ingress,設定的動態條件是

  • Kubernetes Cluster的名稱必須是vanilla開頭
  • Ingress的名稱必須是dvwa-ingress

條件設定完成後,可以檢視有哪些Member符合此條件。此時我們就可以看到這個群組內有包含了在vanilla-124-cluster內,名稱叫dvwa-ingress的ingress,且IP地址為172.20.13.216。接著,這個群組就可以拿去到防火牆使用了。

Kubernetes叢集內的Pod如何連接到外部環境(內對外)

而在Kubernetes內的Pod如果要連接到外部環境如資料庫或其他服務,會有哪些機制呢?同樣如下圖所示:

  • 最基本的方法就是K8S Pod直接透過所在Node的網路介面IP做Source NAT轉址出去,即下圖中間Node 2的機制。
  • Antrea內支持採用Egress,即各個namespace內的Pod可指定特定IP地址做Source NAT轉址再連出,即下圖上方Node 1之機制。
  • 在特定的Routing模式,即各個Pod可以直接不做NAT,連接至底層網路的情境內,如下圖Node 3。

同樣地,在下面於NSX群組內可以進行的動態條件配置。其中

  • K8S Node選擇了這個K8S Cluster內的Node IP,包含所有於此K8S Cluster內採用標準Source-NAT連外的Pod會採用的Node網路IP地址
  • Antrea Egress可以選擇指定的Egress物件,查詢其對應IP地址。
  • 如果管理者有利用Antrea IP Pool來配置路由型態IP機制,就直接採用Antrea IP Pool此條件進行選擇(對應所有Pod可能被配置的IP地址)。

一樣舉個例子。下圖內,我們在名稱為vanilla-124-cluster這個Kubernetes叢集內,建立了一個egress物件名稱叫做debug-egress,並且定義了其IP地址為172.16.18.81:

此時我們建立一個群組叫做vanilla-k8s-debug-egress,設定的動態條件是

  • Kubernetes Cluster的名稱必須是vanilla開頭
  • Egress的名稱必須是debug-egress

條件設定完成後,可以發現debug-egress物件有正確地包含在此群組內,且IP地址為172.16.18.81。同樣地,我們就可以將這個群組放到防火牆規則的Source端來進行需要的配置了。

本篇我們詳細地討論了採用NSX Group動態條件來選擇Kubernetes Cluster南北向出入口物件的方式,希望讓大家更清楚相關的配置與機制。下篇網誌是系列文最後一篇,同樣地我們會採用Q&A的方式,來回答在與客戶與經銷夥伴介紹此功能時,常被問到的問題。