Sdílet prostřednictvím


Síťové režimy kontejneru Service Fabric

Cluster Azure Service Fabric pro kontejnerové služby používá ve výchozím nastavení síťový režim nat . Pokud na stejném portu naslouchá více než jedna služba kontejneru a používá se režim překladu adres, může dojít k chybám nasazení. Service Fabric nabízí pro podporu více služeb kontejnerů, které naslouchají na stejném portu, otevřený síťový režim (verze 5.7 a novější). V režimu Open má každá služba kontejneru interní dynamicky přiřazenou IP adresu, která podporuje více služeb, které naslouchají na stejném portu.

Pokud máte v manifestu služby jednu službu kontejneru se statickým koncovým bodem, můžete vytvářet a odstraňovat nové služby pomocí režimu Otevření bez chyb nasazení. Stejný soubor docker-compose.yml lze také použít se statickými mapováními portů k vytvoření více služeb.

Když se služba kontejneru restartuje nebo přesune do jiného uzlu v clusteru, změní se IP adresa. Z tohoto důvodu nedoporučujeme ke zjišťování služeb kontejneru používat dynamicky přiřazenou IP adresu. Ke zjišťování služeb by se měla použít pouze služba pojmenování Service Fabric nebo služba DNS.

Upozorňující

Azure umožňuje celkem 65 356 IP adres na virtuální síť. Součet počtu uzlů a počtu instancí služby container Service (které používají režim Open) nesmí překročit 65 356 IP adres ve virtuální síti. Pro scénáře s vysokou hustotou doporučujeme síťový režim nat. Kromě toho budou mít další závislosti, jako je nástroj pro vyrovnávání zatížení, další omezení , která je potřeba zvážit. V současné době bylo otestováno a otestováno až 50 IP adres na uzel.

Nastavení otevřeného síťového režimu

  1. Nastavte šablonu Azure Resource Manageru. V části fabricSettings prostředku clusteru povolte službu DNS a poskytovatele IP adres:

    "fabricSettings": [
                {
                    "name": "DnsService",
                    "parameters": [
                       {
                            "name": "IsEnabled",
                            "value": "true"
                      }
                    ]
                },
                {
                    "name": "Hosting",
                    "parameters": [
                      { 
                            "name": "IPProviderEnabled",
                            "value": "true"
                      }
                    ]
                },
                {
                    "name": "Setup",
                    "parameters": [
                    {
                            "name": "ContainerNetworkSetup",
                            "value": "true"
                    }
                    ]
                }
            ],
    
  2. Nastavte část profilu sítě prostředku škálovací sady virtuálních počítačů. To umožňuje konfiguraci více IP adres na každém uzlu clusteru. Následující příklad nastaví pět IP adres na uzel pro cluster Service Fabric s Windows/Linuxem. Na každém uzlu můžete mít pět instancí služby, které naslouchají na portu. Pokud chcete mít pět IP adres přístupných z Azure Load Balanceru, zaregistrujte pět IP adres ve fondu back-endových adres Azure Load Balanceru, jak je znázorněno níže. V oddílu proměnných budete také muset přidat proměnné na začátek šablony.

    Přidejte tuto část do proměnných:

    "variables": {
        "nicName": "NIC",
        "vmName": "vm",
        "virtualNetworkName": "VNet",
        "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',variables('virtualNetworkName'))]",
        "vmNodeType0Name": "[toLower(concat('NT1', variables('vmName')))]",
        "subnet0Name": "Subnet-0",
        "subnet0Prefix": "10.0.0.0/24",
        "subnet0Ref": "[concat(variables('vnetID'),'/subnets/',variables('subnet0Name'))]",
        "lbID0": "[resourceId('Microsoft.Network/loadBalancers',concat('LB','-', parameters('clusterName'),'-',variables('vmNodeType0Name')))]",
        "lbIPConfig0": "[concat(variables('lbID0'),'/frontendIPConfigurations/LoadBalancerIPConfig')]",
        "lbPoolID0": "[concat(variables('lbID0'),'/backendAddressPools/LoadBalancerBEAddressPool')]",
        "lbProbeID0": "[concat(variables('lbID0'),'/probes/FabricGatewayProbe')]",
        "lbHttpProbeID0": "[concat(variables('lbID0'),'/probes/FabricHttpGatewayProbe')]",
        "lbNatPoolID0": "[concat(variables('lbID0'),'/inboundNatPools/LoadBalancerBEAddressNatPool')]"
    }
    

    Přidejte tuto část do prostředku škálovací sady virtuálních počítačů:

    "networkProfile": {
                "networkInterfaceConfigurations": [
                  {
                    "name": "[concat(parameters('nicName'), '-0')]",
                    "properties": {
                      "ipConfigurations": [
                        {
                          "name": "[concat(parameters('nicName'),'-',0)]",
                          "properties": {
                            "primary": "true",
                            "loadBalancerBackendAddressPools": [
                              {
                                "id": "[variables('lbPoolID0')]"
                              }
                            ],
                            "loadBalancerInboundNatPools": [
                              {
                                "id": "[variables('lbNatPoolID0')]"
                              }
                            ],
                            "subnet": {
                              "id": "[variables('subnet0Ref')]"
                            }
                          }
                        },
                        {
                          "name": "[concat(parameters('nicName'),'-', 1)]",
                          "properties": {
                            "primary": "false",
                            "loadBalancerBackendAddressPools": [
                              {
                                "id": "[variables('lbPoolID0')]"
                              }
                            ],
                            "subnet": {
                              "id": "[variables('subnet0Ref')]"
                            }
                          }
                        },
                        {
                          "name": "[concat(parameters('nicName'),'-', 2)]",
                          "properties": {
                            "primary": "false",
                            "loadBalancerBackendAddressPools": [
                              {
                                "id": "[variables('lbPoolID0')]"
                              }
                            ],
                            "subnet": {
                              "id": "[variables('subnet0Ref')]"
                            }
                          }
                        },
                        {
                          "name": "[concat(parameters('nicName'),'-', 3)]",
                          "properties": {
                            "primary": "false",
                            "loadBalancerBackendAddressPools": [
                              {
                                "id": "[variables('lbPoolID0')]"
                              }
                            ],
                            "subnet": {
                              "id": "[variables('subnet0Ref')]"
                            }
                          }
                        },
                        {
                          "name": "[concat(parameters('nicName'),'-', 4)]",
                          "properties": {
                            "primary": "false",
                            "loadBalancerBackendAddressPools": [
                              {
                                "id": "[variables('lbPoolID0')]"
                              }
                            ],
                            "subnet": {
                              "id": "[variables('subnet0Ref')]"
                            }
                          }
                        },
                        {
                          "name": "[concat(parameters('nicName'),'-', 5)]",
                          "properties": {
                            "primary": "false",
                            "loadBalancerBackendAddressPools": [
                              {
                                "id": "[variables('lbPoolID0')]"
                              }
                            ],
                            "subnet": {
                              "id": "[variables('subnet0Ref')]"
                            }
                          }
                        }
                      ],
                      "primary": true
                    }
                  }
                ]
              }
    
  3. Pouze pro clustery s Windows nastavte pravidlo skupiny zabezpečení sítě (NSG) Azure, které otevře port UDP/53 pro virtuální síť s následujícími hodnotami:

    Nastavení Hodnota
    Priorita 2000
    Název Custom_Dns
    Zdroj VirtualNetwork
    Cíl VirtualNetwork
    Služba DNS (UDP/53)
    Akce Povolit
  4. Zadejte síťový režim v manifestu aplikace pro každou službu: <NetworkConfig NetworkType="Open">. Otevření síťového režimu způsobí, že služba získá vyhrazenou IP adresu. Pokud není zadaný režim, služba se ve výchozím nastavení nastaví na režim nat . V následujícím příkladu manifestu NodeContainerServicePackage1 NodeContainerServicePackage2 můžou jednotlivé služby naslouchat na stejném portu (obě služby naslouchají Endpoint1). Při zadání PortBinding otevřeného síťového režimu nelze zadat konfigurace.

    <?xml version="1.0" encoding="UTF-8"?>
    <ApplicationManifest ApplicationTypeName="NodeJsApp" ApplicationTypeVersion="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance">
      <Description>Calculator Application</Description>
      <Parameters>
        <Parameter Name="ServiceInstanceCount" DefaultValue="3"></Parameter>
        <Parameter Name="MyCpuShares" DefaultValue="3"></Parameter>
      </Parameters>
      <ServiceManifestImport>
        <ServiceManifestRef ServiceManifestName="NodeContainerServicePackage1" ServiceManifestVersion="1.0"/>
        <Policies>
          <ContainerHostPolicies CodePackageRef="NodeContainerService1.Code" Isolation="hyperv">
           <NetworkConfig NetworkType="Open"/>
          </ContainerHostPolicies>
        </Policies>
      </ServiceManifestImport>
      <ServiceManifestImport>
        <ServiceManifestRef ServiceManifestName="NodeContainerServicePackage2" ServiceManifestVersion="1.0"/>
        <Policies>
          <ContainerHostPolicies CodePackageRef="NodeContainerService2.Code" Isolation="default">
            <NetworkConfig NetworkType="Open"/>
          </ContainerHostPolicies>
        </Policies>
      </ServiceManifestImport>
    </ApplicationManifest>
    

    Různé síťové režimy můžete kombinovat a spárovat mezi službami v rámci aplikace pro cluster s Windows. Některé služby můžou používat režim Otevřít, zatímco jiné používají režim nat. Pokud je služba nakonfigurovaná tak, aby používala režim překladu adres, musí být port, na který služba naslouchá, jedinečný.

    Poznámka:

    V clusterech s Linuxem není podporováno kombinování síťových režimů pro různé služby.

  5. Pokud je vybrán režim Otevření, definice koncového bodu v manifestu služby by měla explicitně odkazovat na balíček kódu odpovídající koncovému bodu, i když balíček služby obsahuje pouze jeden balíček kódu.

    <Resources>
      <Endpoints>
        <Endpoint Name="ServiceEndpoint" Protocol="http" Port="80" CodePackageRef="Code"/>
      </Endpoints>
    </Resources>
    
  6. V případě Windows se restartování virtuálního počítače způsobí opětovné vytvoření otevřené sítě. Jde o zmírnění základního problému v zásobníku sítí. Výchozím chováním je znovu vytvořit síť. Pokud je potřeba toto chování vypnout, je možné použít následující konfiguraci a upgrade konfigurace.

"fabricSettings": [
                {
                    "name": "Setup",
                    "parameters": [
                    {
                            "name": "SkipContainerNetworkResetOnReboot",
                            "value": "true"
                    }
                    ]
                }
            ],          

Další kroky