Azure Load Balancer 浮動 IP 設定

負載平衡器為 UDP 和 TCP 應用程式提供數種功能。

浮動 IP

在某些應用程式案例中,後端集區中單一 VM 上的多個應用程式執行個體偏好或必須使用相同的連接埠。 連接埠重複使用的常見範例包括提供高可用性的叢集、網路虛擬裝置、公開多個不會重新加密的 TLS 端點。

浮動 IP 狀態 結果
已啟用浮動 IP Azure 會將 IP 位址對應變更為 Load Balancer 的前端 IP 位址
已停用浮動 IP Azure 會公開 VM 執行個體的 IP 位址

如果您想要在多個規則重複使用後端連接埠,必須啟用規則定義中的浮動 IP。 啟用浮動 IP 可提供更多彈性。

在圖表中,您會看到 IP 位址對應在啟用浮動 IP 之前和之後的運作方式:此圖顯示在啟用浮動IP之前,透過負載平衡器的網路流量。

此圖顯示啟用浮動IP之後,透過負載平衡器的網路流量。

您可以透過 Azure 入口網站、REST API、CLI、PowerShell 或其他用戶端,在 Load Balancer 規則上設定浮動 IP。 除了規則設定以外,您還必須設定虛擬機器的客體 OS,才能使用浮動 IP。

具有浮動IP之多個前端IP的負載平衡器流量圖表。

此案例中,後端集區中的每個 VM 有三個網路介面︰

  • 後端 IP: 與 VM 相關聯的虛擬 NIC (Azure NIC 資源的 IP 設定)。
  • 前端 1 (FIP1): 客體 OS 內使用 FIP1 的 IP 位址設定的的回送介面。
  • 前端 2 (FIP2): 客體 OS 內使用 FIP2 的 IP 位址設定的的回送介面。

讓我們假設前一個案例的相同前端組態︰

前端 IP 位址 protocol port
綠色前端 1 65.52.0.1 TCP 80
紫色前端 2 65.52.0.2 TCP 80

我們會定義兩個浮動 IP 規則:

規則 前端 對應至後端集區
1 綠色規則 FIP1:80 綠色後端 FIP1:80 (在 VM1 和 VM2)
2 紫色規則 FIP2:80 紫色後端 FIP2:80 (在 VM1 和 VM2)

下表顯示負載平衡器的完整對應︰

規則 前端 IP 位址 protocol port Destination port
綠色規則 1 65.52.0.1 TCP 80 與前端相同 (65.52.0.1) 與前端相同 (80)
紫色規則 2 65.52.0.2 TCP 80 與前端相同 (65.52.0.2) 與前端相同 (80)

輸入流量的目的地現在是在 VM 中回送介面上的前端 IP 位址。 每個規則都必須產生具有唯一組合 (目的地 IP 位址和目的地連接埠組合) 的流程。 透過將目的地 IP 位址變更為流程的前端 IP 位址,就可以在同一部 VM 上重複使用連接埠。 將您的服務繫結至前端的 IP 位址和個別回送介面的連接埠,即可會向負載平衡器公開服務。

您注意到範例中的目的地連接埠不會變更。 雖然這是浮動 IP 案例,Azure Load Balancer 也支援定義負載平衡規則來變更後端目的地連接埠,以及使其和前端的目的地連接埠不同。

浮動 IP 規則類型是數種負載平衡器設定模式的基礎。 目前可用的其中一個範例是設定一個或多個 Always On 可用性群組接聽程式。 經過一段時間,我們會記載更多這類案例。 如需啟用浮動IP所需的特定客體OS設定詳細資訊,請參閱 下一節中的 Azure Load Balancer 浮動IP組態

浮動 IP 客體 OS 設定

若要運作,必須設定虛擬機器的客體 OS,以接收負載平衡器前端 IP 和連接埠所繫結的所有流量。 設定 VM 需要:

  • 新增回送網路介面
  • 使用負載平衡器的前端 IP 位址設定回送
  • 確保系統可以在介面 (未將 IP 位址指派給該介面) 上傳送/接收封包。Windows 系統需要設定介面以使用「弱式主機」模型。 若為 Linux 系統,通常預設會使用此模型。
  • 設定主機防火牆以允許前端 IP 連接埠上的流量。

注意

下列範例全都使用 IPv4;若要使用 IPv6,請以「ipv6」取代「ipv4」。 另請注意,IPv6 的浮動 IP 不適用於內部負載平衡器。

Windows Server

展開

針對後端集區中的每個 VM,在伺服器上的 Windows 命令提示字元中執行下列命令。

若要取得您在 VM 上所擁有的介面名稱清單,請輸入下列命令:

netsh interface ipv4 show interface 

針對 (Azure 管理的) VM NIC,請輸入下列命令。

netsh interface ipv4 set interface "interfacename" weakhostreceive=enabled

(將 interfacename 取代為此介面的名稱)

針對所新增的每個回送介面,重複下列命令:

netsh interface ipv4 add addr floatingipaddress floatingip floatingipnetmask
netsh interface ipv4 set interface floatingipaddress weakhostreceive=enabled  weakhostsend=enabled 

(將 loopbackinterface 取代為這個回送介面的名稱,將 floatingipfloatingipnetmask 取代為適當值,例如對應至負載平衡器前端 IP 的值)

最後,如果在客體主機上使用防火牆,請確定已設定規則,讓流量可以在適當的連接埠上抵達 VM。

此範例組態假設負載平衡器前端 IP 組態為 1.2.3.4,以及連接埠 80 的負載平衡規則:

netsh int ipv4 set int "Ethernet" weakhostreceive=enabled
netsh int ipv4 add addr "Loopback Pseudo-Interface 1" 1.2.3.4 255.255.255.0
netsh int ipv4 set int "Loopback Pseudo-Interface 1" weakhostreceive=enabled weakhostsend=enabled
netsh advfirewall firewall add rule name="http" protocol=TCP localport=80 dir=in action=allow enable=yes

Ubuntu

展開

針對後端集區中的每個 VM,透過 SSH 工作階段執行下列命令。

若要取得您在 VM 上所擁有的介面名稱清單,請輸入下列命令:

ip addr

針對每個回送介面,重複下列命令,將浮動 IP 指派給回送別名:

sudo ip addr add floatingip/floatingipnetmask dev lo:0

(將 floatingipfloatingipnetmask 取代為適當值,例如對應至負載平衡器前端 IP 的值)

最後,如果在客體主機上使用防火牆,請確定已設定規則,讓流量可以在適當的連接埠上抵達 VM。

此範例組態假設負載平衡器前端 IP 組態為 1.2.3.4,以及連接埠 80 的負載平衡規則。 此範例也會假設在 Ubuntu 中使用 UFW (Uncomplicated Firewall)

sudo ip addr add 1.2.3.4/24 dev lo:0
sudo ufw allow 80/tcp

限制

  • 在負載平衡規則上啟用浮動IP時,您的應用程式必須使用網路介面的主要IP組態進行輸出。
  • 您無法在次要 IPv4 設定上使用浮動 IP 來進行負載平衡案例。 這項限制不適用於具有雙堆疊 (IPv4 和 IPv6) 組態的公用負載平衡器,或適用於使用 NAT 閘道進行輸出連線的架構。
  • 如果您的應用程式系結至客體OS中回送介面上設定的前端IP位址,Azure 的輸出將不會重寫輸出流程,且流程失敗。 請檢閱輸出案例

下一步