Service Fabric-containernetwerkmodi
Een Azure Service Fabric-cluster voor containerservices maakt standaard gebruik van de nat-netwerkmodus . Wanneer meer dan één containerservice luistert op dezelfde poort en de NAT-modus wordt gebruikt, kunnen er implementatiefouten optreden. Service Fabric biedt Open-netwerkmodus (versie 5.7 en hoger) ter ondersteuning van meerdere containerservices die op dezelfde poort luisteren. In de open modus heeft elke containerservice een intern, dynamisch toegewezen IP-adres dat ondersteuning biedt voor meerdere services die op dezelfde poort luisteren.
Als u één containerservice met een statisch eindpunt in uw servicemanifest hebt, kunt u nieuwe services maken en verwijderen met behulp van de open-modus zonder implementatiefouten. Hetzelfde docker-compose.yml-bestand kan ook worden gebruikt met statische poorttoewijzingen om meerdere services te maken.
Wanneer een containerservice opnieuw wordt opgestart of naar een ander knooppunt in het cluster wordt verplaatst, verandert het IP-adres. Daarom raden we u niet aan het dynamisch toegewezen IP-adres te gebruiken om containerservices te detecteren. Alleen de Service Fabric Naming Service of de DNS-service moet worden gebruikt voor servicedetectie.
Waarschuwing
Azure staat in totaal 65.356 IP-adressen per virtueel netwerk toe. De som van het aantal knooppunten en het aantal containerservice-exemplaren (die de open modus gebruiken) mag niet groter zijn dan 65.356 IP-adressen binnen een virtueel netwerk. Voor high-densityscenario's raden we nat-netwerkmodus aan. Daarnaast hebben andere afhankelijkheden, zoals de load balancer, andere beperkingen om rekening mee te houden. Momenteel zijn maximaal 50 IP-adressen per knooppunt getest en bewezen stabiel.
Open-netwerkmodus instellen
Stel de Azure Resource Manager-sjabloon in. Schakel in de sectie fabricSettings van de clusterresource de DNS-service en de IP-provider in:
"fabricSettings": [ { "name": "DnsService", "parameters": [ { "name": "IsEnabled", "value": "true" } ] }, { "name": "Hosting", "parameters": [ { "name": "IPProviderEnabled", "value": "true" } ] }, { "name": "Setup", "parameters": [ { "name": "ContainerNetworkSetup", "value": "true" } ] } ],
Stel de sectie netwerkprofiel van de virtuele-machineschaalsetresource in. Hierdoor kunnen meerdere IP-adressen worden geconfigureerd op elk knooppunt van het cluster. In het volgende voorbeeld worden vijf IP-adressen per knooppunt ingesteld voor een Windows/Linux Service Fabric-cluster. U kunt vijf service-exemplaren hebben die op de poort op elk knooppunt luisteren. Als u wilt dat de vijf IP-adressen toegankelijk zijn vanuit de Azure Load Balancer, moet u de vijf IP-adressen inschrijven in de back-endadresgroep van Azure Load Balancer, zoals hieronder wordt weergegeven. U moet ook de variabelen toevoegen aan het begin van de sjabloon in de sectie variabelen.
Voeg deze sectie toe aan variabelen:
"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')]" }
Voeg deze sectie toe aan de virtuele-machineschaalsetresource:
"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 } } ] }
Stel alleen voor Windows-clusters een NSG-regel (Azure Network Security Group) in waarmee poort UDP/53 voor het virtuele netwerk wordt geopend met de volgende waarden:
Instelling Weergegeven als Prioriteit 2000 Naam Custom_Dns Bron VirtualNetwork Bestemming VirtualNetwork Service DNS (UDP/53) Actie Toestaan Geef de netwerkmodus op in het toepassingsmanifest voor elke service:
<NetworkConfig NetworkType="Open">
Open de netwerkmodus resulteert in het ophalen van een toegewezen IP-adres in de service. Als er geen modus is opgegeven, wordt de service standaard ingesteld op nat-modus . In het volgende manifestvoorbeeld kunnen deNodeContainerServicePackage1
enNodeContainerServicePackage2
services op dezelfde poort luisteren (beide services luisteren opEndpoint1
). Wanneer de modus Open-netwerk is opgegeven,PortBinding
kunnen configuraties niet worden opgegeven.<?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>
U kunt verschillende netwerkmodi combineren en vergelijken in services binnen een toepassing voor een Windows-cluster. Sommige services kunnen de open modus gebruiken terwijl andere de nat-modus gebruiken. Wanneer een service is geconfigureerd voor het gebruik van de NAT-modus, moet de poort waarop de service luistert uniek zijn.
Notitie
Op Linux-clusters wordt het combineren van netwerkmodi voor verschillende services niet ondersteund.
Wanneer de open modus is geselecteerd, moet de definitie van het eindpunt in het servicemanifest expliciet verwijzen naar het codepakket dat overeenkomt met het eindpunt, zelfs als het servicepakket slechts één codepakket bevat.
<Resources> <Endpoints> <Endpoint Name="ServiceEndpoint" Protocol="http" Port="80" CodePackageRef="Code"/> </Endpoints> </Resources>
Voor Windows wordt het open netwerk opnieuw opgestart door een virtuele machine. Dit is om een onderliggend probleem in de netwerkstack te verhelpen. Het standaardgedrag is om het netwerk opnieuw te maken. Als dit gedrag moet worden uitgeschakeld, kan de volgende configuratie worden gebruikt, gevolgd door een configuratie-upgrade.
"fabricSettings": [
{
"name": "Setup",
"parameters": [
{
"name": "SkipContainerNetworkResetOnReboot",
"value": "true"
}
]
}
],