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

這一篇我要把幾個架構相關的Load Balancer常見詢問放在一起,與大家討論。

 

  1. NSXLoad Balancer可以走Transparent Mode或是Proxy Mode嗎?Load Balancer必須要放在什麼地方?

 

可以的,兩種模式都支援。

 

當我們裝置負載平衡功能時,必須要確保去回的Traffic均會通過負載平衡器。通常在架構設計上有兩種做法:第一種是Transparent Mode,通常又被稱為Two-Arm Mode。下圖內是NSX Data Center內跑Transparent Mode的常見架構:

 

在Transparent Mode內,應用的Traffic在路由配置上,回傳時必須要能夠通過Load Balancer。在Client連接到Virtual Server的IP時,Load Balancer會將目的地IP更改為後端負載的IP,但『不會更動來源IP』。意思是,後端Web Server那邊在網路IP層,會看到的連線來源IP是來自Client,回應也是要直接送回給Client。

 

所以這邊的網路架構上,Load Balancer必須要在Web Server到Client間的路由上。不然Load Balancer收不到連線,負載平衡與NAT的處理都會出問題。因此Transparent Mode的優缺點是:

 

  • 優點:應用可以由網路層的連線Log就直接看到用戶來源IP(像是稽核可能要看)。

 

  • 缺點:網路架構得變,負載平衡器必須要放到用戶與應用的路由之間。

 

而Proxy Mode (或是被稱為One-Arm Mode)的架構大概是這樣:

 

Proxy Mode內Load Balancer可以放在任何IP連得到的地方。Client往Virtual Server IP連時沒問題一定會到Load Balancer,但此時Load Balancer同時也會將Client來源IP改成在Load Balancer上的IP。此時,後端Web Server會看到的網路連線IP是來自Load Balancer,也因此,Web的回應也會往Load Balancer回傳(因為來源IP在Load Balancer上)。

 

Proxy Mode的優缺點是:

 

  • 優點:現有網路架構不用變,Load Balancer旁接即可,客戶要部署這個Load Balancer會很簡單。

 

  • 缺點:應用抓網路層的連線Log時看到的來源IP是Load Balancer不是用戶,此時寫的比較爛的應用就不知道是哪個用戶連它了。

 

這兩個模式都各自有好處,NSX也都支援。在配置內,負載平衡的模式是在Server Pool內:

在Translation Mode內有三個選擇,其中:

 

  • Transparent:這個選擇就是Transparent Mode。

 

  • Auto Map:這是Proxy Mode,但是轉換的Load Balancer IP由NSX自行決定(通常是Load Balancer對應Tier-1路由器的介面IP)。

 

  • IP List:這也是Proxy Mode,可是管理者可以選一個IP或是IP Range來指定要轉換的IP。

 

  1. 那最佳做法是什麼?可以又好裝又符合應用需求嗎?

 

這在數年前其實應該就有定論了,為了好裝與易於維運,用Proxy (One-Arm) Mode其實比較常見。但應用需要看到來源IP啊?此時常會用到的是X-Forwarded-For (XFF) 機制。Load Balancer雖然會在網路層把Client IP改掉,但同時會把真實的來源IP放到HTTP表頭內的X-Forwarded-For欄位。因此,比較新的應用程式開發時就可以藉由讀取連線的X-Forwarded-For機制來取得真實的用戶連線IP。

如上圖,若我們要啟用XFF,必須要建立一個新的HTTP Application Profile。在裡面就有X-Forwarded-For的選項,None代表不配置,INSERT代表加入原始Client IP,REPLACE代表把之前的XFF欄位以目前Load Balancer看到的來源IP進行取代。

 

下圖內我們用NSX-T加上Wireshark來抓包給大家看一下。抓包內的第8項可以看出HTTP的Get,是來自172.16.16.220 (Load Balancer IP) 到172.16.16.211 (Web Server IP)。而在下面的封包資料內,HTTP內表頭有出現一項X-Forwarded-For是來自172.16.6.99。這就是真正的Client IP。

  1. 如果我的環境只有用vlan沒有用Overlay-Network,那可以使用NSXLoad Balancer嗎?

 

可以喔。

 

NSX-T 2.4版之後可以支援下面的架構:

在這個架構內,

 

  • Load Balancer所在的Tier-1 Router並不需要接到一個T0 Router上。

 

  • 這個T1 Router需要直接接到一個vlan上。此時代表我們要在NSX-T內建立一個vlan-based的logical switch,然後T1 Router要透過一個”Centralized Type”的Port連接到這個vlan-based logical switch上

 

  • 同時我們會設定一筆static route,告訴這個T1 Router預設路由(Gateway在實體網路設備上)。

 

下圖內我們看到,LBDemo-T1的這台T1 Router內有一個Router Port叫做”To-vlan16″,型態是Centralized(用來接vlan),而連接到VLAN-16這個Logical Switch上。

同時這台路由器上,設定靜態路由:預設路徑 (0.0.0.0/0) 都往 172.16.16.254(實體網路環境上的gateway)送。

        當然,在這個架構內這台路由器上的負載平衡器只能跑Proxy Mode不能是Transparent Mode,因為一般來說Load Balancer不會在路由路徑上。

 

  1. 所以NSX Load Balancer有沒有不支援,需要特別注意的架構?

 

有的。

 

在前面第一篇有特別提到,我們的負載平衡器只有三層路由模式。如果是採用Transparent Mode,負載平衡器所接取的T1 Router必須是Client到Web Server間的路由一部分。如果是Proxy Mode,負載平衡器也一定有配置一個獨立IP,透過Virtual Server / SNAT方式將Client / Web的Traffic強制導往Load Balancer所在的T1 Router上。

 

許多友商的實體負載平衡器可以支援另一種方式,就是利用L2 Switch or Tap的方式,直接抓Client – Web間的ethernet traffic並進行上層連線處理。這種二層機制NSX內並沒有,是實體負載平衡器特有的機制。部署NSX Load Balancer時,我們必須避免這種架構。

 

與NSX負載平衡架構相關的討論大致到這邊,我們下期待續。