在 Service Fabric 托管群集上使用 NAT 网关

Service Fabric 托管群集具有面向外部的 IP,外部客户端可通过这些 IP 访问群集的资源。 但是在某些情况下,最好提供对这些资源的 Internet 访问,而不直接向 Internet 公开这些资源。 NAT 网关会启用此功能。

如果群集中有资源需要接收来自 Internet 的入站流量,但也有需要保护的专用资源,那么 NAT 网关可提供帮助。 此外,如果你有应用程序需要在群集外部建立连接来访问机密、存储和其他专用资源,NAT 网关也可提供帮助。

下面是对托管群集使用 NAT 网关的一些好处:

  • 提高安全性:Azure NAT 网关基于零信任网络安全模型构建,默认情况下是安全的。 使用 NAT 网关时,子网中的专用实例不需要公共 IP 地址即可访问 Internet。 专用资源可以通过源网络地址转换 (SNAT) 到 NAT 网关的静态公共 IP 地址或前缀来访问虚拟网络外部的外部源。 可使用公共 IP 前缀为出站连接提供一组连续的 IP,而且可基于这个可预测 IP 列表配置目标防火墙规则。
  • 复原能力:Azure NAT 网关是一项完全托管的分布式服务。 它不依赖于单个计算实例,例如 VM 或单个物理网关设备。 NAT 网关始终包含具有多个容错域,可以承受多次故障的同时避免服务中断。 软件定义的网络使 NAT 网关具有高复原能力。
  • 简化网络体系结构:通过 NAT 网关,你无需使用堡垒主机或 VPN 连接即可访问专用子网中的实例,从而简化了网络体系结构。
  • 性能:Azure NAT 网关性能高且稳定

下图描绘了主节点类型和辅助节点类型的群集,其中每个节点类型都有自己的子网。 辅助节点类型位于 NAT 网关后面,其所有传出流量都通过网关路由。 当流量源自辅助节点类型时,公共 IP 地址是 NAT 网关的公共 IP 地址。 由于所有传出请求都通过 NAT 网关路由,因此可实施其他 NSG 规则,从而提高安全性并阻止外部服务发现内部服务。

描绘使用 NAT 网关处理传出流量的群集的示意图。

在以下场景中,支持在 Service Fabric 托管群集上使用 NAT 网关:

先决条件

对于你的场景,请确保按照步骤正确配置托管群集的网络。

自带使用 NAT 网关的虚拟网络

以下步骤介绍如何将 NAT 网关附加到虚拟网络子网。

  1. 请按照 Azure NAT 网关快速入门中的步骤创建 NAT 网关。

  2. 使用角色分配向 Service Fabric 资源提供程序授予修改 NAT 网关设置的权限。 按照“配置托管群集网络设置”一文的“自带虚拟网络”部分中的前两个步骤操作,将 NAT 网关的信息注入子网参数。

  3. 现在,你已准备好将 NAT 网关附加到虚拟网络的子网。 可使用 ARM 模板、Azure CLI、Azure PowerShell 或 Azure 门户。

ARM 模板

修改并部署以下 ARM 模板,将 NAT 网关引入子网的属性:

{ 
    "apiVersion": "[variables('networkApiVersion')]", 
    "type": "Microsoft.Network/virtualNetworks", 
    "name": "[parameters('vnetName')]", 
    "location": "[resourcegroup().location]", 
    "dependsOn": [ 
      "[parameters('natGatewayId'))]" 
    ], 
    "properties": { 
        "subnets": [ 
          { 
            "name": "[parameters('subnetName')]", 
            "properties": { 
              "addressPrefix": "[parameters('subnetAddressPrefix')]", 
              "natGateway": { 
                "id": "[parameters('natGatewayId'))]" 
              } 
            } 
          } 
        ] 
    } 
} 

Azure CLI

使用你的信息修改并运行以下 Azure CLI 命令:

az network vnet subnet update --resource-group myResourceGroup --vnet-name mvVNet --name mySubnet --nat-gateway myNATGateway

Azure PowerShell

  1. 将虚拟网络放到变量中

    $net = @{
      Name = `myVNet`
      ResourceGroupName = 'myResourceGroup'
    }
    $vnet = Get-AzVirtualNetwork @net
    
  2. 将 NAT 网关放到变量中

    $nat = @{
      Name = 'myNATgateway'  
      ResourceGroupName = 'myResourceGroup'
    } 
    $natGateway = Get-AzNatGateway @nat 
    
  3. 设置子网配置

    $subnet = @{  
      Name = 'mySubnet' 
      VirtualNetwork = $vnet 
      NatGateway = $natGateway 
      AddressPrefix = '10.0.2.0/24'  
    } 
    Set-AzVirtualNetworkSubnetConfig @subnet
    
  4. 将配置保存到虚拟网络

    $vnet | Set-AzVirtualNetwork
    

Azure 门户

  1. Azure 门户上导航到你的虚拟网络资源。

  2. 在“设置”下,选择“子网”。

  3. 选择要与 NAT 网关关联的子网。

  4. 打开“NAT 网关”下拉列表,并选择你的 NAT 网关。

    显示选择 NAT 网关的下拉列表的屏幕截图。

  5. 单击“ 保存”。

自带使用 Azure NAT 网关的负载均衡器

以下步骤介绍如何将 NAT 网关附加到虚拟网络子网。

注意

只可通过 ARM 模板实现此场景。

  1. 请按照 Azure NAT 网关快速入门中的步骤创建 NAT 网关。

  2. 使用角色分配向 Service Fabric 资源提供程序授予修改 NAT 网关设置的权限。 按照“配置托管群集网络设置”一文的“自带虚拟网络”部分中的前两个步骤操作,将 NAT 网关的信息注入子网参数。

  3. 将以下属性添加到部署,以将 NAT 网关附加到专用子网:

{ 
    "apiVersion": "2023-03-01-preview", 
    "type": "Microsoft.ServiceFabric/managedclusters/nodetypes", 
    "name": "[concat(parameters('clusterName'), '/', parameters('nodeTypeName'))]", 
    "location": "[parameters('clusterLocation')]", 
    "properties": { 
   ... 
        "isPrimary": false, 
        "natGatewayId": "[variables('natID')]", 
        "frontendConfigurations": [...], 
   ... 
} 

后续步骤