配置 Azure 內部負載均衡器
我正在嘗試使用 Azure 中的新內部負載平衡功能配置 VNET。我計劃讓 2 台前端伺服器通過 ILB(內部負載均衡器)與 2 台後端伺服器通信。
我相信我已正確遵循所有說明,但我網路中的機器似乎仍然無法使用 ILB 進行通信。
我做了什麼:
我通過上傳以下配置文件設置了具有 2 個子網 Subnet-1 和 Subnet-2 的區域虛擬網路,因為區域 VNET 尚無法通過 UI 使用。
網路配置:
<NetworkConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration"> <VirtualNetworkConfiguration> <VirtualNetworkSites> <VirtualNetworkSite name="my-net" Location="West US"> <AddressSpace> <AddressPrefix>192.168.10.0/24</AddressPrefix> </AddressSpace> <Subnets> <Subnet name="BackendSubnet"> <AddressPrefix>192.168.10.0/27</AddressPrefix> </Subnet> <Subnet name="FrontendSubnet"> <AddressPrefix>192.168.10.32/27</AddressPrefix> </Subnet> <Subnet name="GatewaySubnet"> <AddressPrefix>192.168.10.64/29</AddressPrefix> </Subnet> </Subnets> </VirtualNetworkSite> </VirtualNetworkSites> </VirtualNetworkConfiguration> </NetworkConfiguration>
我在 2 個雲服務中創建了 2 個 VM,並使用以下 powershell 將它們添加到我的 VNet。
$imgname = "ad072bd3082149369c449ba5832401ae__Windows-Server-Remote-Desktop-Session-Host-on-Windows-Server-2012-R2-20140403-2126" $vmname1 = "後端1" $vmname2 = "後端2" $vmname3 = "前端1" $vmname4 = "前端2" $backendSubnet = "後端子網" $frontendSubnet = "前端子網" $adminname = "SomeAdmin" $adminpw = "密碼" $backend1 = New-AzureVMConfig -Name $vmname1 -InstanceSize Small -ImageName $imgname | 添加-AzureProvisioningConfig -Windows -AdminUsername $adminname -Password $adminpw | 設置 AzureSubnet $backendSubnet $backend2 = New-AzureVMConfig -Name $vmname2 -InstanceSize Small -ImageName $imgname | 添加-AzureProvisioningConfig -Windows -AdminUsername $adminname -Password $adminpw | 設置 AzureSubnet $backendSubnet $frontend1 = New-AzureVMConfig -Name $vmname3 -InstanceSize Small -ImageName $imgname | 添加-AzureProvisioningConfig -Windows -AdminUsername $adminname -Password $adminpw | 設置 AzureSubnet $frontendSubnet $frontend2 = New-AzureVMConfig -Name $vmname4 -InstanceSize Small -ImageName $imgname | 添加-AzureProvisioningConfig -Windows -AdminUsername $adminname -Password $adminpw | 設置 AzureSubnet $frontendSubnet New-AzureVM -ServiceName "my-net-backend" -VMs $backend1 -Location "West US" -VNetName "my-net" New-AzureVM -ServiceName "my-net-backend" -VMs $backend2 -Location "West US" New-AzureVM -ServiceName "my-net-frontend" -VMs $frontend1 -Location "West US" -VNetName "my-net" New-AzureVM -ServiceName "my-net-frontend" -VMs $frontend2 -Location "West US"
我遠端連接到每個虛擬機並在埠 80 上配置 IIS,並使用一個簡單的 HTML 頁面進行測試並驗證它在本地工作、匿名訪問等。
然後我使用以下 powershell 在 VNET 中創建了一個 DNS 伺服器:
$dnsname = "我的DNS" $dnsconfig = New-AzureVMConfig -Name $dnsname -InstanceSize Small -ImageName $imgname | 添加-AzureProvisioningConfig -Windows -AdminUsername $adminname -Password $adminpw | 設置 AzureSubnet $frontendSubnet
VM 準備就緒後,我在 Windows 2012 R2 中將我的伺服器配置為 DNS 伺服器,並添加了一個帶有簡單後綴“mytest.net”的正向查找區域
然後在 Azure 管理 UI 中,我將此 DNS 伺服器添加到我的 VNET。重新配置 VNET 後,我重新啟動了所有虛擬機。
一旦我的虛擬機重新上線,我就遠端連接到我的 DNS 伺服器並為“test.mytest.net”創建了一個 A-Record
之後,我遠端連接到每個子網中的 1 台伺服器,並確保“test.mytest.net”的 NSLOOKUP 正確解析。
此時,一切似乎都進行得很順利。
最後,我開始使用 Powershell 配置新的 Azure 內部負載均衡器,如下所示:
Add-AzureInternalLoadBalancer -InternalLoadBalancerName "MyILB" -SubnetName "BackendSubnet" -ServiceName "my-net-backend" -StaticVNetIPAddress "192.168.10.30" Get-AzureVM -ServiceName "my-net-backend" -Name $backend1 | Add-AzureEndpoint -Name "backend-ep" -LBSetName "backend-ep-set" -Protocol tcp -LocalPort 80 -PublicPort 80 -ProbePort 80 -ProbeProtocol http -ProbeIntervalInSeconds 10 -InternalLoadBalancerName "MyILB" | 更新-AzureVM Get-AzureVM -ServiceName "my-net-backend" -Name $backend2 | Add-AzureEndpoint -Name "backend-ep" -LBSetName "backend-ep-set" -Protocol tcp -LocalPort 80 -PublicPort 80 -ProbePort 80 -ProbeProtocol http -ProbeIntervalInSeconds 10 -InternalLoadBalancerName "MyILB" | 更新-AzureVM
據我了解,我剛剛創建了一個名為 MyILB 的 ILB,其靜態 IP 為 192.168.10.30,然後在後端的每個 VM 上,我為 HTTP 埠 80 創建了一個端點,並將該機器添加到 ILB。此時,我假設發往 192.168.10.30 的 HTTP 埠 80 流量將在我的 Backend1 和 Backend2 虛擬機之間進行負載平衡。但是,這似乎沒有按我的預期工作。
我連接到 DNS 伺服器並為 192.168.10.30 創建了一個名為 backend.mytest.net 的 A-Record,並驗證該名稱可以在所有伺服器上解析。
當我遠端訪問前端伺服器並在瀏覽器中使用 DNS 名稱 backend.mytest.net 或 192.168.10.30 時,我會失敗。
我還驗證了在兩個後端伺服器上,所有區域(域、公共和私有)的防火牆都允許 HTTP 80 入站。
管理 UI 沒有在 VM 上顯示這些端點,但我懷疑這是因為它們是通過 powershell 命令創建的,而 UI 還不支持這一點。
有人在這裡有任何見解或想法嗎?我知道我正處於讓它發揮作用的邊緣。
使用說明:
查看Add-AzureEndpoint的文件,我認為您缺少 -ProbePath
如果 ProbeProtocol 設置為“http”,則為必需。否則省略。指定將探測其執行狀況的 URI。
由於您使用的是 http,因此我認為它是必需的。