Azure Load Balancer 浮動 IP 設定

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

浮動 IP

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

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

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

顯示在啟用浮動 IP 之後通過負載平衡器的網路流量圖表。

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

浮動 IP 規則類型是數種負載平衡器設定模式的基礎。 目前可用的其中一個範例是設定一個或多個 Always On 可用性群組接聽程式。 經過一段時間,我們會記載更多這類案例。

浮動 IP 客體作業系統設定

為了能夠運作,您須將虛擬機器的客體作業系統設定為接收所有傳送至 Load Balancer 前端 IP 和連接埠的流量。 設定 VM 需要:

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

注意

下列範例全都使用 IPv4;若要使用 IPv6,請以「ipv6」取代「ipv4」。

Windows 伺服器

展開

對於後端池中的每個虛擬機,首先透過 Windows Server 網路介面卡管理新增一個迴圈網路介面卡。 然後在伺服器上以提高權限的 Windows 命令提示字元執行下列命令。

  1. 要取得 VM 上的介面名稱清單,請輸入以下命令:

    netsh interface ipv4 show interface 
    
  2. 對於 VM NIC(Azure 託管),在將 interface-name 替換為要使用的介面名稱後輸入以下命令:

    netsh interface ipv4 set interface <interface-name> weakhostreceive=enabled
    
  3. 對於您添加的每個環回介面,請將 loopback-interface-name 替換為環回介面的名稱,並將 floating-IP 和 floating-IPnetmask 替換為與負載均衡器前端 IP 對應的適當值,然後輸入以下命令:

    netsh interface ipv4 add addr <loopback-interface-name> <floating-IP> <floating-IPnetmask>
    netsh interface ipv4 set interface <loopback-interface-name> weakhostreceive=enabled  weakhostsend=enabled 
    
  4. 如果訪客主機使用防火牆,務必設定規則,讓流量能在適當的埠口抵達虛擬機。 此範例配置假設負載平衡器前端 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
    
  5. 確認迴路介面是否已指派前端 IP 位址:

    netsh interface ipv4 show addresses name="<loopback-interface-name>"
    

    確認輸出是否包含前端 IP 位址。 從能連上負載平衡器的用戶端,連接到前端 IP 位址和規則埠,以確認流量是否到達虛擬機。

Ubuntu

展開

對於後端池中的每台虛擬機,透過 SSH 會話執行以下指令。 Linux 已經提供 lo 迴圈裝置;指令用作 lo:0 位址標籤,因此不會建立獨立的迴圈介面。

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

    ip addr
    
  2. 把前端 IP 位址加到迴路裝置上。 將 floating-IP 替換為負載平衡器的前端 IP 位址,並將 floating-IPnetmask 替換為 Linux CIDR 前綴長度,例如 24:

    sudo ip addr add <floating-IP>/<floating-IPnetmask> dev lo:0
    
  3. 如果訪客主機使用防火牆,務必設定規則,讓流量能在適當的埠口抵達虛擬機。 此範例配置假設負載平衡器前端 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
    
  4. 確認迴路裝置是否已分配前端 IP 位址:

    ip address show dev lo
    

    確認輸出是否包含前端 IP 位址。 從能連上負載平衡器的用戶端,連接到前端 IP 位址和規則埠,以確認流量是否到達虛擬機。

限制

啟用浮動 IP 時,出站連線會依應用程式使用的網路介面 IP 設定以及應用程式如何綁定迴路前端 IP 位址而定。

  • 在負載平衡規則上啟用浮動 IP 時,您的應用程式必須使用網路介面的主要 IP 設定進行輸出。
  • 如果您的應用程式繫結至客體作業系統中環回介面上設定的前端 IP 位址,Azure 的對外連線就不會改寫該輸出流量,因此該流量將會失敗。 請檢閱輸出案例。
  • 負載平衡案例的次要 IP 組態目前不支援浮動 IP。 此限制不適用於輔助IP配置為IPv6且屬於雙堆疊配置的公有負載均衡器,也不適用於使用NAT閘道進行出站連接的架構。

下一步