輸入 NAT 規則可用來將流量從負載平衡器前端轉送至後端集區中的單一或多個執行個體。 這些規則提供負載平衡器前端 IP 位址與後端執行個體之間的1:1對應。 目前有兩個版本的輸入 NAT 規則,第 1 版和第 2 版。
重要
2027 年 9 月 30 日起,入站 NAT 池(入站 NAT 規則 V1 的Azure 虛擬機器擴展集專屬功能)將被退休。 如果你目前使用 Inbound NAT Pools 搭配 虛擬機器擴展集,請在退休日前遷移到 Inbound NAT 規則 V2。 單一虛擬機入站NAT規則V1不受此退休影響 ,也不需要遷移。
NAT 規則第 1 版
入站 NAT 規則第 1 版包含兩個明顯特色:
單一虛擬機入站 NAT 規則 — 提供負載平衡器前端 IP/埠與特定虛擬機器之間的 1:1 埠對應。 規則直接套用到虛擬機的網路介面卡(NIC)。 這些不會退役,也不需要遷移。
入站NAT 池(僅限虛擬機器擴展集) — 這是舊有方式,用於將Azure Load Balancer的前端埠分配給每個後端實例。 輸入 NAT 規則會在虛擬機器擴展集向上或向下調整時,依每個虛擬機器擴展集執行個體自動建立與刪除。 NAT 集區是在負載平衡器上定義,並由 虛擬機器擴展集 的 NIC 設定透過
loadBalancerInboundNatPools屬性加以參照。 這些規則將於 2027 年 9 月 30 日退休,必須遷移至 Inbound NAT 規則 V2。
NAT 規則第 2 版
輸入 NAT 規則第 2 版提供與第 1 版相同的功能集,並具有額外的優點。
- 簡化的部署體驗和優化的更新。
- 輸入 NAT 規則現在以負載平衡器的後端集區為目標,且不再需要虛擬機器 NIC 上的參考。 先前在第 1 版上,每當輸入 NAT 規則變更時,負載平衡器和虛擬機器的 NIC 都必須更新。 第 2 版只需要負載平衡器上設定的單一呼叫,就能產生優化的更新。
- 輕鬆擷取輸入 NAT 規則與後端執行個體之間的連接埠對應。
- 在舊版供應方式中,若要擷取 Inbound NAT 規則與虛擬機器執行個體之間的連接埠對應,則必須將該規則與虛擬機器的 NIC 建立關聯。 第 2 版會將規則與後端執行個體之間的連接埠對應直接插入負載平衡器的設定中。
如何知道我使用的是第 1 版的輸入 NAT 規則?
若要識別您的部署是否使用第 1 版功能,最簡單的方式,就是檢查負載平衡器的設定。 版本 1 的 NAT 規則其 Type 值會是 Azure Virtual Machine,且已定義 Target virtual machine 值。
在版本 2 的 NAT 規則中,Type 值將是帶有定義目標後端池值的後端池。
要程式化判斷部署是否使用了 Inbound NAT 規則的第 1 版,請使用 Azure CLI 或 PowerShell 檢查負載平衡器的設定。 如果 backendIPConfiguration 設定中的任一 InboundNATRule 屬性已填入值,則該部署即屬於 Inbound NAT 規則第 1 版。 版本 2 規則會用屬性 backendAddressPool 取代屬性 backendIPConfiguration 。
我要如何判斷自己是否在使用輸入 NAT 集區?
要檢查你的負載平衡器是否設定了 Inbound NAT Pools:
az network lb inbound-nat-pool list -g MyResourceGroup --lb-name MyLoadBalancer
如果上述指令回傳任何結果,則表示你的負載平衡器正在使用 Inbound NAT Pools,且應進行遷移。
主要差異在於 ARM 屬性名稱:入站 NAT 池顯示在負載平衡器的屬性下 inboundNatPools ,而入站 NAT 規則則顯示在 inboundNatRules 屬性下。 如果你的負載平衡器陣列不是空 inboundNatPools 的,表示它正在使用入站 NAT 池,必須在 2027 年 9 月 30 日前遷移到 V2。
Note
如果你的負載平衡器只有單一虛擬機入站 NAT 規則(Type = “Azure 虛擬機”)且沒有入站 NAT 池,不需要遷移。 單一虛擬機 V1 規則不會被淘汰。
如何從 Inbound NAT Pools 遷移到 版本 2?
在移轉之前,請務必檢閱下列資訊:
- 移轉至輸入 NAT 規則的第 2 版,會導致透過 NAT 規則的作用中流量停機。 透過負載平衡器規則或輸出規則的流量在移轉過程中不會受到影響。
- 規劃後端集區中執行個體的最大數目。 由於第 2 版是以負載平衡器後端集區為目標,因此必須配置足夠的連接埠數目供 NAT 規則的前端使用。
- 每個後端執行個體都會在新的 NAT 規則中設定的連接埠上公開。
- 如果多個 NAT 規則具有重疊的連接埠範圍,或具有相同的後端連接埠,則這些規則無法存在。
- NAT 規則和負載平衡規則無法共用相同的後端連接埠。
手動移轉
必須執行下列三個步驟,才能移轉至輸入 NAT 規則的第 2 版
- 刪除負載平衡器設定上輸入 NAT 規則的第 1 版。
- 移除虛擬機器或虛擬機器擴展集設定中對 NAT 規則的參照。
- 所有虛擬機器規模集執行個體都需要更新。
- 部署輸入 NAT 規則第 2 版。
虛擬機器擴展集
重要
這是輸入 NAT 集區淘汰所需的移轉路徑。 所有使用入站 NAT 池的虛擬機器擴展集部署必須在 2027 年 9 月 30 日前完成此遷移。
下列步驟可用來將虛擬機器擴展集的輸入 NAT 規則從第 1 版移轉至第 2 版。 它會假設虛擬機器擴展集的升級模式設定為 [手動]。 如需詳細資訊,請參閱 Azure 中虛擬機器擴展集的協調流程模式
az network lb inbound-nat-pool delete -g MyResourceGroup --lb-name MyLoadBalancer -n MyNatPool
az vmss update -g MyResourceGroup -n MyVMScaleSet --remove virtualMachineProfile.networkProfile.networkInterfaceConfigurations[0].ipConfigurations[0].loadBalancerInboundNatPools
az vmss update-instances --instance-ids '*' --resource-group MyResourceGroup --name MyVMScaleSet
az network lb inbound-nat-rule create -g MyResourceGroup --lb-name MyLoadBalancer -n MyNatRule --protocol Tcp --frontend-port-range-start 201 --frontend-port-range-end 500 --backend-port 22 --backend-address-pool MybackendPool
使用適用於虛擬機器擴展集的自動化指令碼進行移轉
移轉流程將會重複使用現有的後端集區,其成員資格符合要移轉的 NAT 集區;如果找不到相符的後端集區,指令碼將結束 (不進行任何變更)。 或者,使用 -backendPoolReuseStrategy 參數,一律建立新的後端集區 (NoReuse),或在不存在相符的後端集區時建立新的後端集區 (OptionalFirstMatch)。 可以在移轉後更新後端集區和 NAT 規則關聯以符合您的喜好設定。
必要條件
開始移轉流程之前,請確定符合下列必要條件:
- 若要將負載平衡器的 NAT 集區移轉至 NAT 規則,則負載平衡器的 SKU 必須為標準。 若要將此升級程序自動化,請參閱使用PowerShell 將基本負載平衡器升級至標準中提供的步驟。
- 與目標 Load Balancer相關聯的虛擬機器擴展集必須使用「手動」或「自動」升級原則—不支援「輪流」升級原則。 如需詳細資訊,請參閱 虛擬機器擴展集升級原則。
- 安裝最新版的 PowerShell。
- 安裝 Azure PowerShell 模組。
安裝 AzureLoadBalancerNATPoolMigration 模組
若要從 PowerShell 資源庫安裝 AzureLoadBalancerNATPoolMigration 模組,請執行以下命令:
# Install the AzureLoadBalancerNATPoolMigration module
Install-Module -Name AzureLoadBalancerNATPoolMigration -Scope CurrentUser -Repository PSGallery -Force
將 NAT 集區升級至 NAT 規則
安裝 azureLoadBalancerNATPoolMigration 模組後,請使用下列步驟將您的 NAT 集區升級至 NAT 規則:
使用
Connect-AzAccount連線至 Azure。針對 NAT 規則升級收集目標負載平衡器名稱,以及其資源群組名稱。
使用您的資源名稱執行移轉命令,以取代
<loadBalancerResourceGroupName>和<loadBalancerName>的預留位置:# Run the migration command Start-AzNATPoolMigration -ResourceGroupName <loadBalancerResourceGroupName> -LoadBalancerName <loadBalancerName>