为独立或高可用性 VPX 实例配置多个 Azure VIP

在 Azure Resource Manager (ARM) 中,为单个 Citrix ADC VPX 部署以及高可用性 (HA) 部署配置多个公用虚拟 IP 地址 (VIP)。

注意:只能为外部负载平衡器配置多个 VIP。

要在单模式和高可用性模式下部署 Citrix ADC VPX 实例,必须单独使用 PowerShell 命令,因为只能通过 PowerShell 创建多个前端 IP 地址 (FIP)。

以独立模式部署 Citrix ADC VPX

本节提供 PowerShell 命令,用于在独立模式下部署 Citrix ADC VPX,并将多个前端 IP 映射到单个后端池。

配置多个 FIP、后端池、LB 规则和入站 NAT 规则,作为配置 Azure 负载平衡器的一部分。

确保在单个 Citrix ADC VPX 部署中满足以下条件:

  1. 后端池仅包含一个 Citrix ADC VPX 实例。
  2. 定义了两个负载平衡器规则,并映射到以下两个 VIP:
    1. VIP1:80 > Back-end Pool 1:10080
    2. VIP2:80 > Back-end Pool 1:10081
  3. 定义负载平衡器规则以映射 VIP1:10080 > 后端池 1:80,以访问 Citrix ADC VPX 用户界面。
  4. 定义的入站 NAT 规则用于映射 VIP1:22 > 后端池 1:22,以通过 SSH 访问 Citrix ADC VPX。

下图说明了如何在 Azure Resource Manager 上为 Citrix ADC 虚拟服务器配置多个云服务 IP 地址。

本地化后的图片

运行以下 PowerShell 命令以在独立模式下部署 Citrix ADC VPX 实例:

1. 创建资源组

$rgName=”<resource group name>”

$locName=”<location name, such as West US>”

命令

New-AzureRmResourceGroup -Name $rgName -Location $locName

例如

$rgName = "ARM-LB-NS"

$locName = "East Asia"

New-AzureRmResourceGroup -Name $rgName -Location $locName

2. 创建存储帐户

必须为您的存储帐户选择仅包含小写字母和数字的全局唯一名称。

$saName=”<storage account name>”

$saType=”<storage account type, specify one: Standard_LRS, Standard_GRS, Standard_RAGRS, or Premium_LRS>”

命令


New-AzureRmStorageAccount -Name $saName -ResourceGroupName $rgName -Type $saType -Location $locName

例如

$saName="vpxstorage"

$saType="Standard_LRS"

New-AzureRmStorageAccount -Name $saName -ResourceGroupName $rgName -Type $saType -Location $locName

3. 创建可用性集

$avName=”<availability set name>”

命令


New-AzureRmAvailabilitySet -Name $avName -ResourceGroupName $rgName -Location $locName

例如

$avName="avNSSet"

4. 创建虚拟网络和子网

如果以前未创建,请添加一个至少包含一个子网的新虚拟网络。

$vnetName = “LBVnet”

命令

创建子网

$frontendSubnet=New-AzureRmVirtualNetworkSubnetConfig -Name   frontendSubnet -AddressPrefix 10.0.1.0/24

(请根据您的要求配置此参数值)


$backendSubnet=New-AzureRmVirtualNetworkSubnetConfig -Name backendSubnet -AddressPrefix 10.0.2.0/24

创建虚拟网络

New-AzureRmVirtualNetwork -Name $vnetName -ResourceGroupName $rgName -Location $locName -AddressPrefix 10.0.0.0/16 -Subnet $frontendSubnet,$backendSubnet

5. 创建公用 IP 地址

创建的公用 IP 的数量应等于所需的外部 VIP 数量。

  • 使用之前,请检查 DomainNameLabel 的值的可用性。
  • 创建两个 VIP。

命令


$pubName1 ="PublicIp1"

$dnsName1="nsvpx1"

$pubName2 ="PublicIp2"

$dnsName2="nsvpx2"

$publicIP1 = New-AzureRmPublicIpAddress -Name $pubName1 -ResourceGroupName $rgName -Location $locName -AllocationMethod Static -DomainNameLabel $dnsName1

$publicIP2 = New-AzureRmPublicIpAddress -Name $pubName2 -ResourceGroupName $rgName -Location $locName -AllocationMethod Static -DomainNameLabel $dnsName2

6. 为指定的公用 IP 地址创建前端 IP

$FIPName1 =”VIP1”

$FIPName2=”VIP2”

命令

$frontendIP1 = New-AzureRmLoadBalancerFrontendIpConfig -Name $FIPName1 -PublicIpAddress $publicIP1

$frontendIP2 = New-AzureRmLoadBalancerFrontendIpConfig -Name $FIPName2 -PublicIpAddress $publicIP2

7. 创建后端池

$BEPool1 = “backend-Pool1”

命令

$beaddresspool1= New-AzureRmLoadBalancerBackendAddressPoolConfig -Name $BEPool1

8. 创建运行状况探测

创建使用端口 9000 且时间间隔为 5 秒的 TCP 运行状况探测。

命令

$healthProbe = New-AzureRmLoadBalancerProbeConfig -Name HealthProbe -Protocol Tcp -Port 9000 -IntervalInSeconds 5 -ProbeCount 2

9. 创建负载平衡器规则

对于每个前端 IP 和服务,我们都需要创建 lbRule。

这里的后端地址池 可以包含一组虚拟机。对于单 VPX 部署,此池将仅包含一个 VPX 实例。

注意:任意两条规则的前端 IP 配置、后端地址池、前端端口、后端端口参数的组合值都不应相同。

例如,每次进行 FIP/VIP 访问时,HTTP 服务都使用前端端口 80。由于后端池相同,因此需要针对每个负载平衡器规则采用不同的方式使用后端端口。

命令


$lbrule1 = New-AzureRmLoadBalancerRuleConfig -Name "HTTP1" -FrontendIpConfiguration $frontendIP1 -BackendAddressPool  $beAddressPool1 -Probe $healthProbe -Protocol Tcp -FrontendPort 80 -BackendPort 10080

$lbrule2 = New-AzureRmLoadBalancerRuleConfig -Name "HTTP2" -FrontendIpConfiguration $frontendIP2 -BackendAddressPool  $beAddressPool1 -Probe $healthProbe -Protocol Tcp -FrontendPort 80 -BackendPort 10081

可以通过以下方式添加用于访问 NS 的 http 服务的负载平衡器规则:

命令

$lbrule3 = New-AzureRmLoadBalancerRuleConfig -Name "HTTPNS" -FrontendIpConfiguration $frontendIP1 -BackendAddressPool  $beAddressPool1 -Probe $healthProbe -Protocol Tcp -FrontendPort 10080 -BackendPort 80

10. 创建入站 NAT 规则

为不需要进行负载平衡的服务创建 NAT 规则。

例如,请对 VPX 实例创建 ssh 访问。

属于相同前端 IP 的两条 NAT 规则的 Protocol - FrontEndPort - BackendPort 三联码不应相同。

命令


$inboundNATRule1= New-AzureRmLoadBalancerInboundNatRuleConfig -Name SSH1 -FrontendIpConfiguration $frontendIP1 -Protocol TCP -FrontendPort 22 -BackendPort 22

11. 创建负载平衡器

使用上述所有定义的规则、前端 IP 和后端池创建负载平衡器。

命令

$lbName = "NSALB"

$NRPLB = New-AzureRmLoadBalancer -ResourceGroupName $rgName -Name $lbName -Location $locName -InboundNatRule $inboundNATRule1 -FrontendIpConfiguration $frontendIP1, $frontendIP2 -LoadBalancingRule $lbrule1, $lbrule2, $lbrule3 -BackendAddressPool $beAddressPool1  -Probe $healthProbe

12. 创建 NIC

创建一个网卡并将其与 Citrix ADC VPX 实例关联。

命令


$nicName="NIC1"

$lbName="NSALB"

$bePoolIndex=0

$natRuleIndex=0

$subnetIndex=0 ß Frontend subnet index

$lb=Get-AzureRmLoadBalancer -Name $lbName -ResourceGroupName $rgName

$nic1=New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $locName -Subnet $vnet.Subnets[$subnetIndex] -LoadBalancerBackendAddressPool $lb.BackendAddressPools[$bePoolIndex] -LoadBalancerInboundNatRule $lb.InboundNatRules[$natRuleIndex]

13. 创建 Citrix ADC VPX 实例

从应用商城映像创建 Citrix ADC VPX 实例,并将网卡连接到虚拟实例。

命令

$vmName="VPX1"

$vmSize="Standard_A3" / "Standard_DS4"

$pubName="citrix"

$skuName = "netscalerbyol"

$offerName="netscalervpx110-6531"

$avSet=Get-AzureRmAvailabilitySet -Name $avName -ResourceGroupName $rgName

$vm1=New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avset.Id

$cred=Get-Credential -Message "Type Credentials which will be used to login to VPX instance"

$vm1=Set-AzureRmVMOperatingSystem -VM $vm1 -Linux -ComputerName $vmName -Credential $cred -Verbose

$vm1=Set-AzureRmVMSourceImage -VM $vm1 -PublisherName $pubName -Offer $offerName -Skus $skuName -Version "latest"

$vm1=Add-AzureRmVMNetworkInterface -VM $vm1 -Id $nic1.Id

$diskName="dynamic"

$storageAcc=Get-AzureRmStorageAccount -ResourceGroupName $rgName -Name $saName

$osDiskUri1=$storageAcc.PrimaryEndpoints.Blob.ToString() + "vhds1/" + $diskName  + ".vhd"

$vm1=Set-AzureRmVMOSDisk -VM $vm1 -Name $diskName -VhdUri $osDiskUri1 -CreateOption fromImage

Set-AzureRmVMPlan -VM $vm1 -Publisher $pubName -Product $offerName -Name $skuName

New-AzureRmVM -ResourceGroupName $rgName -Location $locName -VM $vm1

以上命令创建 Citrix ADC VPX 实例,然后将虚拟服务器添加到 Citrix ADC VPX 实例,用于指定的前端服务。

在高可用性模式下部署 Citrix ADC VPX

本节提供 PowerShell 命令,用于在 HA 部署中使用映射到单个后端池的多个前端 IP 部署 Citrix ADC VPX。

将多个 FIP、后端池、负载平衡规则和入站 NAT 规则配置为 Azure 负载平衡器的一部分。

确保在 Citrix ADC VPX 实例的 HA 部署中满足以下条件:

  1. 后端池包含两个 Citrix ADC VPX 实例,这些实例是 HA 的一部分。
  2. 定义了两个负载平衡器规则,并映射到以下两个 VIP:
    1. VIP1:80 > 后端池 1:10080
    2. VIP2:80 > Back-end Pool 1:10081
  3. 定义了负载平衡器规则,该规则映射 VIP1:10080,以访问 Citrix ADC VPX GUI。
  4. 定义两条入站 NAT 规则以映射下面两个 VIP:
    1. VIP1:22 > 后端池 1:22 访问 Citrix ADC VPX 主站
    2. VIP1:10022 > 后端池-1:22 通过 SSH 访问 Citrix ADC VPX 辅助服务器

定义为 Azure 负载平衡器规则一部分的所有服务将获得负载均衡。即,如果主 VPX 失败,辅助 VPX 将负责处理主被高可用性部署中的所有服务。

下图说明了如何在 Azure Resource Manager 上为处于高可用性模式的 NetScaler 虚拟服务器配置多个云服务 IP 地址。

本地化后的图片

1. 创建资源组

$rgName=”<resource group name>”

$locName=”<位置名称,例如 West US>”

命令

New-AzureRmResourceGroup -Name $rgName -Location $locName

例如

$rgName = "ARM-Mult-VIP-HA"

$locName = "East Asia"

New-AzureRmResourceGroup -Name $rgName -Location $locName

2. 创建存储帐户

必须为您的存储帐户选择仅包含小写字母和数字的全局唯一名称。

$saName=”<storage account name>”

$saType=”<storage account type, specify one: Standard_LRS, Standard_GRS, Standard_RAGRS, or Premium_LRS>”

命令

New-AzureRmStorageAccount -Name $saName -ResourceGroupName $rgName -Type $saType -Location $locName

例如

$saName="vpxstorage1"

$saType="Standard_LRS"

New-AzureRmStorageAccount -Name $saName -ResourceGroupName $rgName -Type $saType -Location $locName

3. 创建可用性集

$avName=”<availability set name>”

命令


New-AzureRmAvailabilitySet -Name $avName -ResourceGroupName $rgName -Location $locName

例如

$avName="avNSSetARM"

4. 创建虚拟网络和子网

如果以前未创建,请添加一个至少包含一个子网的新虚拟网络。

$vnetName = "LBVnet"

命令

创建子网:


$frontendSubnet=New-AzureRmVirtualNetworkSubnetConfig -Name   frontendSubnet -AddressPrefix 10.0.7.0/24

(此参数值应该符合您的要求)

$backendSubnet=New-AzureRmVirtualNetworkSubnetConfig -Name backendSubnet -AddressPrefix 10.0.8.0/24

创建虚拟网络:

New-AzureRmVirtualNetwork -Name $vnetName -ResourceGroupName $rgName -Location $locName -AddressPrefix 10.0.0.0/16 -Subnet $frontendSubnet,$backendSubnet

5. 创建公用 IP 地址

创建的公用 IP 地址的数量应等于所需的外部 VIP 数量。

  • 使用之前,请检查 Domain.Name.Label 的值的可用性。
  • 创建两个 VIP。

命令

$pubName1 ="PublicIp1"

$dnsName1="nsvpx1"

$pubName2 ="PublicIp2"

$dnsName2="nsvpx2"

$publicIP1 = New-AzureRmPublicIpAddress -Name $pubName1 -ResourceGroupName $rgName -Location $locName -AllocationMethod Static -DomainNameLabel $dnsName1

$publicIP2 = New-AzureRmPublicIpAddress -Name $pubName2 -ResourceGroupName $rgName -Location $locName -AllocationMethod Static -DomainNameLabel $dnsName2

6. 创建前端 IP 地址

$FIPName1 = "VIP1"

$FIPName2="VIP2"

命令

$frontendIP1 = New-AzureRmLoadBalancerFrontendIpConfig -Name $FIPName1 -PublicIpAddress $publicIP1

$frontendIP2 = New-AzureRmLoadBalancerFrontendIpConfig -Name $FIPName2 -PublicIpAddress $publicIP2

7. 创建后端池

$BEPool1 = "backend-Pool1"

命令

$beaddresspool1= New-AzureRmLoadBalancerBackendAddressPoolConfig -Name $BEPool1

8. 创建运行状况探测

创建使用端口 9000 且时间间隔为 5 秒的 TCP 运行状况探测。

命令

$healthProbe = New-AzureRmLoadBalancerProbeConfig -Name HealthProbe -Protocol Tcp -Port 9000 -IntervalInSeconds 5 -ProbeCount 2

9. 创建负载平衡器规则

对于每个前端 IP 和服务,您必须创建一个单独的负载平衡器规则。

后端地址池可以包含一组虚拟机。对于单个 Citrix ADC VPX 部署,仅将单个 Citrix ADC VPX 实例作为此池的一部分。

注意:任意两条规则的前端 IP 配置、后端地址池、前端端口、后端端口参数的组合值都不应相同。

示例

每次进行 FIP/VIP 访问时,HTTP 服务都使用前端端口 80。由于后端池相同,因此必须针对每个负载平衡器规则以不同的方式使用后端端口。

命令

$lbrule1 = New-AzureRmLoadBalancerRuleConfig -Name "HTTP1" -FrontendIpConfiguration $frontendIP1 -BackendAddressPool  $beAddressPool1 -Probe $healthProbe -Protocol Tcp -FrontendPort 80 -BackendPort 10080

$lbrule2 = New-AzureRmLoadBalancerRuleConfig -Name "HTTP2" -FrontendIpConfiguration $frontendIP2 -BackendAddressPool  $beAddressPool1 -Probe $healthProbe -Protocol Tcp -FrontendPort 80 -BackendPort 10081

可以通过以下方式添加用于访问 Citrix ADC VPX 实例的 HTTP 服务的负载平衡器配置规则:

命令

$lbrule3 = New-AzureRmLoadBalancerRuleConfig -Name "HTTPNS" -FrontendIpConfiguration $frontendIP1 -BackendAddressPool  $beAddressPool1 -Probe $healthProbe -Protocol Tcp -FrontendPort 10080 -BackendPort 80

10. 创建入站 NAT 规则

为不需要进行负载平衡的服务创建 NAT 规则。

例如,请对 VPX 实例创建 ssh 访问。

注意:属于相同前端 IP 地址的两条 NAT 规则的 Protocol - Front-end Port - Back-end Port 三联码不应相同。

命令

$inboundNATRule1= New-AzureRmLoadBalancerInboundNatRuleConfig -Name SSH1 -FrontendIpConfiguration $frontendIP1 -Protocol TCP -FrontendPort 22 -BackendPort 22
$inboundNATRule2= New-AzureRmLoadBalancerInboundNatRuleConfig -Name SSH2 -FrontendIpConfiguration $frontendIP1 -Protocol TCP -FrontendPort 10022 -BackendPort 22

11. 创建负载平衡器

使用上述所有定义的规则、前端 IP 和后端池创建负载平衡器。

命令

$lbName ="NSALB"

$NRPLB = New-AzureRmLoadBalancer -ResourceGroupName $rgName -Name $lbName -Location $locName -InboundNatRule $inboundNATRule1, $inboundNATRule2 -FrontendIpConfiguration $frontendIP1, $frontendIP2 -LoadBalancingRule $lbrule1, $lbrule2, $lbrule3 -BackendAddressPool $beAddressPool1  -Probe $healthProbe

12. 创建 NIC

创建一个网卡并将其与 Citrix ADC VPX 实例关联。

命令

$nicName="NIC1"

$lbName="NSALB"

$bePoolIndex=0

$natRuleIndex=0

$subnetIndex=0 ß Frontend subnet index

$lb=Get-AzureRmLoadBalancer -Name $lbName -ResourceGroupName $rgName

$nic1=New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $locName -Subnet $vnet.Subnets[$subnetIndex] -LoadBalancerBackendAddressPool $lb.BackendAddressPools[$bePoolIndex] -LoadBalancerInboundNatRule $lb.InboundNatRules[$natRuleIndex]

$nicName="NIC2”

$lbName="NSALB"

$bePoolIndex=0

$natRuleIndex=1ß 2nd SSH rule

$subnetIndex=0

$nic2=New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $locName -Subnet $vnet.Subnets[$subnetIndex] -LoadBalancerBackendAddressPool $lb.BackendAddressPools[$bePoolIndex] -LoadBalancerInboundNatRule $lb.InboundNatRules[$natRuleIndex]

13. 创建 Citrix ADC VPX 实例

从应用商城映像创建 Citrix ADC VPX 实例并将网卡连接到该实例。

命令

$vmName="VPX1"

$vmSize="Standard_A3"

$pubName="citrix"

$skuName = "netscalerbyol"

$offerName="netscalervpx110-6531"

$avSet=Get-AzureRmAvailabilitySet -Name $avName -ResourceGroupName $rgName

$vm1=New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avset.Id

$cred=Get-Credential -Message "Type Credentials which will be used to login to VPX instance"

$vm1=Set-AzureRmVMOperatingSystem -VM $vm1 -Linux -ComputerName $vmName -Credential $cred -Verbose

$vm1=Set-AzureRmVMSourceImage -VM $vm1 -PublisherName $pubName -Offer $offerName -Skus $skuName -Version "latest"

$vm1=Add-AzureRmVMNetworkInterface -VM $vm1 -Id $nic1.Id

$diskName="dynamic"

$storageAcc=Get-AzureRmStorageAccount -ResourceGroupName $rgName -Name $saName

$osDiskUri1=$storageAcc.PrimaryEndpoints.Blob.ToString() + "vhds1/" + $diskName  + ".vhd"

$vm1=Set-AzureRmVMOSDisk -VM $vm1 -Name $diskName -VhdUri $osDiskUri1 -CreateOption fromImage

Set-AzureRmVMPlan -VM $vm1 -Publisher $pubName -Product $offerName -Name $skuName

New-AzureRmVM -ResourceGroupName $rgName -Location $locName -VM $vm1

$vmName="VPX2"

$vmSize="Standard_A3"

$pubName="citrix"

$skuName = "netscalerbyol"

$offerName="netscalervpx110-6531"

$avSet=Get-AzureRmAvailabilitySet –Name $avName –ResourceGroupName $rgName

$vm2=New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avset.Id

$cred=Get-Credential -Message "Type Credentials which will be used to login to VPX instance"

$vm2=Set-AzureRmVMOperatingSystem -VM $vm2 -Linux -ComputerName $vmName -Credential $cred -Verbose

$vm2=Set-AzureRmVMSourceImage -VM $vm2 -PublisherName $pubName -Offer $offerName -Skus $skuName -Version "latest"

$vm2=Add-AzureRmVMNetworkInterface -VM $vm2 -Id $nic2.Id

$diskName="dynamic”

$storageAcc=Get-AzureRmStorageAccount -ResourceGroupName $rgName -Name $saName

$osDiskUri2=$storageAcc.PrimaryEndpoints.Blob.ToString() + "vhds2/" + $diskName  + ".vhd"

$vm1=Set-AzureRmVMOSDisk -VM $vm2 -Name $diskName -VhdUri $osDiskUri2 -CreateOption fromImage

Set-AzureRmVMPlan -VM $vm2 -Publisher $pubName -Product $offerName -Name $skuName

New-AzureRmVM -ResourceGroupName $rgName -Location $locName -VM $vm2

14. 创建高可用性

当两个 Citrix ADC VPX 实例都在运行时,请通过 SSH 连接到两个 VPX 实例以配置虚拟机。

  1. 要配置主动-被动 HA,请在两个节点上运行“添加 HA 节点 #nodeID”命令,然后在主 VPX 实例上运行配置命令。

  2. 要配置主动-主动 HA,请在两个节点上运行相同的配置命令集。

Azure ARM 组件

下表列出了可以使用 PowerShell 创建的以及可以使用 Azure Resource Manager 门户创建的 Azure Resource Manager (ARM) 组件。

- PowerShell ARM 门户
资源组
存储帐户
可用性设置
虚拟网络和子网
公用 IP
多前端 IP
后端池
健康探测器
每个规则仅使用一个前端 IP 的 LB 规则
每个规则使用不同的前端 IP 的 LB 规则
具有相同前端 IP 的入站 NAT 规则
具有不同前端 IP 的入站 NAT 规则
外部负载平衡器
内部负载平衡器
带前端 IP 的负载平衡器
具有多个前端 IP 的负载平衡器
网络安全组 (NSG)
NIC
虚拟机

为独立或高可用性 VPX 实例配置多个 Azure VIP