Service Fabric-containernätverkslägen
Ett Azure Service Fabric-kluster för containertjänster använder nat-nätverksläge som standard. När fler än en containertjänst lyssnar på samma port och nat-läge används kan distributionsfel uppstå. För att stödja flera containertjänster som lyssnar på samma port erbjuder Service Fabric öppet nätverksläge (version 5.7 och senare). I öppet läge har varje containertjänst en intern, dynamiskt tilldelad IP-adress som stöder flera tjänster som lyssnar på samma port.
Om du har en containertjänst med en statisk slutpunkt i tjänstmanifestet kan du skapa och ta bort nya tjänster med hjälp av Öppet läge utan distributionsfel. Samma docker-compose.yml fil kan också användas med statiska portmappningar för att skapa flera tjänster.
När en containertjänst startas om eller flyttas till en annan nod i klustret ändras IP-adressen. Därför rekommenderar vi inte att du använder den dynamiskt tilldelade IP-adressen för att identifiera containertjänster. Endast Service Fabric Naming Service eller DNS-tjänsten ska användas för tjänstidentifiering.
Varning
Azure tillåter totalt 65 356 IP-adresser per virtuellt nätverk. Summan av antalet noder och antalet containertjänstinstanser (som använder öppet läge) får inte överstiga 65 356 IP-adresser i ett virtuellt nätverk. För scenarier med hög densitet rekommenderar vi nat-nätverksläge. Dessutom har andra beroenden, till exempel lastbalanseraren, andra begränsningar att tänka på. För närvarande har upp till 50 IP-adresser per nod testats och visat sig vara stabila.
Konfigurera Läget Öppna nätverk
Konfigurera Azure Resource Manager-mallen. I avsnittet fabricSettings i klusterresursen aktiverar du DNS-tjänsten och IP-providern:
"fabricSettings": [ { "name": "DnsService", "parameters": [ { "name": "IsEnabled", "value": "true" } ] }, { "name": "Hosting", "parameters": [ { "name": "IPProviderEnabled", "value": "true" } ] }, { "name": "Setup", "parameters": [ { "name": "ContainerNetworkSetup", "value": "true" } ] } ],
Konfigurera avsnittet nätverksprofil i resursen Vm-skalningsuppsättning. Detta gör att flera IP-adresser kan konfigureras på varje nod i klustret. I följande exempel konfigureras fem IP-adresser per nod för ett Windows/Linux Service Fabric-kluster. Du kan ha fem tjänstinstanser som lyssnar på porten på varje nod. Om du vill att de fem IP-adresserna ska vara tillgängliga från Azure Load Balancer registrerar du de fem IP-adresserna i Azure Load Balancer-serverdelsadresspoolen enligt nedan. Du måste också lägga till variablerna överst i mallen i avsnittet variabler.
Lägg till det här avsnittet i Variabler:
"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')]" }
Lägg till det här avsnittet i vm-skalningsuppsättningsresursen:
"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 } } ] }
Endast för Windows-kluster konfigurerar du en NSG-regel (Azure Network Security Group) som öppnar port UDP/53 för det virtuella nätverket med följande värden:
Inställning Värde Prioritet 2000 Name Custom_Dns Källa VirtualNetwork Mål VirtualNetwork Tjänst DNS (UDP/53) Åtgärd Tillåt Ange nätverksläget i programmanifestet för varje tjänst:
<NetworkConfig NetworkType="Open">
. Öppna nätverksläget resulterar i att tjänsten får en dedikerad IP-adress. Om inget läge har angetts är tjänsten som standard nat-läge . I följande manifestexempelNodeContainerServicePackage1
kan tjänsterna ochNodeContainerServicePackage2
lyssna på samma port (båda tjänsterna lyssnar påEndpoint1
). När Läget Öppna nätverk har angettsPortBinding
går det inte att ange konfigurationer.<?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>
Du kan blanda och matcha olika nätverkslägen mellan tjänster i ett program för ett Windows-kluster. Vissa tjänster kan använda öppet läge medan andra använder nat-läge. När en tjänst har konfigurerats för att använda nat-läge måste porten som tjänsten lyssnar på vara unik.
Kommentar
På Linux-kluster stöds inte blandning av nätverkslägen för olika tjänster.
När läget Öppna har valts ska slutpunktsdefinitionen i tjänstmanifestet uttryckligen peka på det kodpaket som motsvarar slutpunkten, även om tjänstpaketet bara har ett kodpaket i sig.
<Resources> <Endpoints> <Endpoint Name="ServiceEndpoint" Protocol="http" Port="80" CodePackageRef="Code"/> </Endpoints> </Resources>
För Windows gör en omstart av den virtuella datorn att det öppna nätverket återskapas. Det här är för att åtgärda ett underliggande problem i nätverksstacken. Standardbeteendet är att återskapa nätverket. Om det här beteendet måste inaktiveras kan följande konfiguration användas följt av en konfigurationsuppgradering.
"fabricSettings": [
{
"name": "Setup",
"parameters": [
{
"name": "SkipContainerNetworkResetOnReboot",
"value": "true"
}
]
}
],