Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure Kubernetes Service (AKS) richt normaal gesproken één Standard Load Balancer (SLB) in voor alle LoadBalancer services in een cluster. Omdat elke knooppunt-NIC is beperkt tot 300 regels voor binnenkomende taakverdeling en 8 privékoppelingsservices, kunnen grote clusters of werkbelastingen met veel poorten deze limieten snel uitputten.
Met de preview van meerdere SLB's wordt dat knelpunt verwijderd door u in staat te stellen meerdere SLB's in hetzelfde cluster te maken en nodes en services over hen te verdelen. U definieert load balancer-configuraties, die elk zijn gekoppeld aan een primaire agentgroep en optionele naamruimte, label of knooppuntkiezer, en AKS plaatst automatisch knooppunten en services op de juiste SLB. Uitgaand SNAT-gedrag blijft ongewijzigd als outboundTypeloadBalancer is. Uitgaand verkeer loopt nog steeds door de eerste SLB.
Gebruik deze functie voor het volgende:
- Schaal meer dan 300 regels voor inkomend verkeer zonder clusters toe te voegen.
- Isoleer tenant- of workloadverkeer door een toegewezen SLB te koppelen aan een eigen agentpool.
- Distribueer private-linkdiensten over meerdere SLB's wanneer u de limiet per SLB nadert.
Vereiste voorwaarden
-
aks-previewextensie 18.0.0b1 of hoger. - Vlag abonnementsfunctie
Microsoft.ContainerService/MultipleStandardLoadBalancersPreviewgeregistreerd. - Kubernetes versie 1.28 of hoger.
- Cluster gemaakt met
--load-balancer-backend-pool-type nodeIPof bijgewerkt en bestaand cluster met behulp vanaz aks update.
De Azure CLI-extensie aks-preview installeren
Belangrijk
AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals het is' en 'voor zover beschikbaar' en zijn uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning naar best vermogen. Zodoende zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:
Installeer de aks-preview-extensie met behulp van de
az extension addopdracht.az extension add --name aks-previewWerk bij naar de nieuwste versie van de extensie die is uitgebracht met behulp van de
az extension updateopdracht.az extension update --name aks-preview
MultipleStandardLoadBalancersPreview De functievlag registreren
Registreer de
MultipleStandardLoadBalancersPreviewfunctievlag met behulp van deaz feature registeropdracht.az feature register --namespace "Microsoft.ContainerService" --name "MultipleStandardLoadBalancersPreview"Het duurt enkele minuten voordat de status Geregistreerd wordt weergegeven.
Controleer de registratiestatus met behulp van de
az feature showopdracht:az feature show --namespace "Microsoft.ContainerService" --name "MultipleStandardLoadBalancersPreview"Wanneer de status Geregistreerd aangeeft, vernieuwt u de registratie van de Microsoft.ContainerService-resourceprovider met behulp van de
az provider register-opdracht.az provider register --namespace Microsoft.ContainerService
Hoe AKS een load balancer kiest (plaatsing van knooppunten en services)
AKS gebruikt meerdere invoer om te bepalen waar knooppunten moeten worden geplaatst en LoadBalancer Services beschikbaar moet worden gemaakt. Deze invoeren worden gedefinieerd in elke load balancer-configuratie en beïnvloeden welke SLB voor elke resource wordt geselecteerd.
| Invoertype | Van toepassing op: | Beschrijving |
|---|---|---|
Primaire agentgroep--primary-agent-pool-name |
Knooppunten | Verplicht. Alle knooppunten in deze pool worden altijd toegevoegd aan de back-end pool van de SLB. Zorgt ervoor dat elke SLB ten minste één goed knooppunt heeft. |
Knooppuntkiezer--node-selector |
Knooppunten | Facultatief. Voegt een knooppunt met overeenkomende labels toe aan de SLB, naast de primaire pool. |
Servicenaamruimtekiezer--service-namespace-selector |
Diensten | Facultatief. Alleen services in naamruimten met overeenkomende labels worden in aanmerking genomen voor deze SLB. |
Servicelabelkiezer--service-label-selector |
Diensten | Facultatief. Alleen services met overeenkomende labels komen in aanmerking voor deze SLB. |
Serviceaantekeningservice.beta.kubernetes.io/azure-load-balancer-configurations |
Diensten | Facultatief. Beperkt de plaatsing tot een of meer expliciet benoemde SLB-configuraties. Zonder deze configuratie komt elke overeenkomende configuratie in aanmerking. |
Opmerking
Selectors definiëren geschiktheid. De aantekening (indien gebruikt) beperkt de controller tot een specifieke subset van SLB's.
Hoe AKS deze invoer gebruikt
Met het AKS-besturingsvlak worden knooppunten en servicestatus continu afgestemd met behulp van de bovenstaande regels:
Plaatsing van knooppunten
Wanneer een knooppunt wordt toegevoegd of bijgewerkt, controleert AKS op welke SLB's het in aanmerking komt op basis van primaire pool en knooppuntkeuzer.
- Als er meerdere SLB's overeenkomen, kiest de controller degene met het minste aantal huidige knooppunten.
- Het knooppunt wordt toegevoegd aan de back-endpool van die SLB.
Serviceplaatsing
Wanneer een LoadBalancer-service wordt gemaakt of bijgewerkt:
- AKS vindt SLB's waarvan de naamruimte en labelkiezers overeenkomen met de Service.
- Als de Service-annotatie aanwezig is, worden alleen de benoemde SLB's overwogen.
- SLB's met allowServicePlacement=false of die de Azure-limieten overschrijden (300 regels of 8 private-link-services) worden uitgesloten.
- Onder geldige opties wordt de SLB met de minste regels gekozen.
gedrag van externalTrafficPolicy (ETP)
AKS verwerkt Services anders, afhankelijk van de waarde van externalTrafficPolicy.
| Wijze | Hoe load balancer-selectie werkt | Hoe de samenstelling van de back-end pool tot stand komt | Opmerkingen |
|---|---|---|---|
| Cluster (standaard) | De controller volgt de standaardplaatsingsregels die hierboven worden beschreven. Eén taakverdelingsregel is gericht op de gedeelde kubernetes-back-endpool op de gekozen SLB. | Alle knooppunten in die pool van kubernetes SLB zijn gezonde doelen. Knooppunten zonder overeenkomende Pods worden automatisch verwijderd door statustests. |
Hetzelfde gedrag als vandaag in clusters met één SLB. |
| Lokaal | De controller gebruikt nog steeds het selector-gebaseerd algoritme om een SLB te kiezen, maar maakt een dedicated back-endpool per service in plaats van de gedeelde pool te gebruiken. | Lidmaatschap wordt gesynchroniseerd vanuit de objecten van EndpointSlice de service, zodat alleen knooppunten die daadwerkelijk gereede pods hosten, worden toegevoegd. Statustests blijven gebruiken healthCheckNodePort om beschadigde knooppunten te verwijderen. |
Garandeert behoud van client-IP en vermijd routering via knooppunten die geen pods hebben, zelfs wanneer knooppunten worden geshard in meerdere SLO's. |
Waarom een toegewezen pool voor ETP Local?
In de multi-SLB-modus kunnen knooppunten die Pods voor een bepaalde Service hosten, zich bevinden op verschillende SLB's dan het klantgerichte VIP. Een gedeelde back-endpool zou vaak geen in aanmerking komende knooppunten bevatten, waardoor het verkeer verstoord wordt. Door een pool per service toe te wijzen en deze te synchroniseren,EndpointSlicezorgt AKS ervoor dat de SLB van de service altijd naar de juiste knooppunten verwijst.
Gevolgen voor quota
- Elke lokale ETP-service voegt één backendpool en één load-balancerregel toe aan de SLB.
- Deze tellen mee voor de limiet van 300 regels, dus bewaak het gebruik van regels wanneer u veel lokale ETP-services hebt.
Geen wijziging in uitgaand verkeer
Uitgaande SNAT loopt nog steeds door van de eerste SLB aksOutboundBackendPool wanneer outboundType gelijk is aan loadBalancer, onafhankelijk van de ETP-instellingen.
Optioneel: Herbalanceren
U kunt de distributie van knooppunten later handmatig opnieuw verdelen met behulp van az aks loadbalancer rebalance.
Met dit ontwerp kunt u flexibele, labelgestuurde routering definiëren voor zowel infrastructuur als workloads, terwijl AKS de plaatsing automatisch afhandelt om de balans te behouden en quotumproblemen te voorkomen.
De eerste load balancer-configuratie toevoegen
Voeg een configuratie toe met de naam kubernetes en bind deze aan een primaire agentgroep die altijd ten minste één knooppunt heeft. Als u elke configuratie verwijdert, wordt het cluster teruggezet naar de single-SLB-modus.
Belangrijk
Als u meerdere SLB-modus wilt inschakelen , moet u een load balancer-configuratie met de naam kubernetes toevoegen en koppelen aan een primaire agentgroep die altijd ten minste één gereed knooppunt heeft.
De aanwezigheid van deze configuratie schakelt multi-SLB-ondersteuning in; in de serviceselectie heeft deze geen speciale prioriteit en wordt deze behandeld als elke andere load balancer-configuratie.
Als u elke load balancer-configuratie verwijdert, valt het cluster automatisch terug naar de modus single-SLB, waardoor serviceroutering of SNAT-stromen kort kunnen worden onderbroken.
Stel omgevingsvariabelen in voor gebruik in deze zelfstudie. U kunt alle tijdelijke aanduidingen vervangen door uw eigen waarden, behalve
DEFAULT_LB_NAME, die alskubernetesmoeten blijven.RESOURCE_GROUP="rg-aks-multislb" CLUSTER_NAME="aks-multi-slb" LOCATION="westus" DEFAULT_LB_NAME="kubernetes" PRIMARY_POOL="nodepool1"Maak een resourcegroep met behulp van de
az group createopdracht.az group create --name $RESOURCE_GROUP --location $LOCATIONMaak een AKS-cluster met behulp van de
az aks createopdracht.\az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME \ --load-balancer-backend-pool-type nodeIP \ --node-count 3Voeg een standaard load balancer toe met behulp van de
az aks loadbalancer addopdracht.az aks loadbalancer add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME \ --name $DEFAULT_LB_NAME \ --primary-agent-pool-name $PRIMARY_POOL \ --allow-service-placement true
Extra load balancers toevoegen
Maak tenantspecifieke configuraties door een andere primaire pool op te geven plus optionele naamruimte, label of knooppuntkiezers.
Team 1 voert zijn eigen workloads uit in een afzonderlijke knooppuntgroep. Wijs een
tenant=team1label toe zodat workloads kunnen worden gepland met behulp van selectors:TEAM1_POOL="team1pool" TEAM1_LB_NAME="team1-lb"Maak een tweede knooppuntgroep voor team 1 met behulp van de
az aks nodepool addopdracht.az aks nodepool add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME \ --name $TEAM1_POOL \ --labels tenant=team1 \ --node-count 2Maak een load balancer voor team 1 met behulp van de
az aks loadbalancer addopdracht.az aks loadbalancer add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME \ --name $TEAM1_LB_NAME \ --primary-agent-pool-name $TEAM1_POOL \ --service-namespace-selector "tenant=team1" \ --node-selector "tenant=team1"Geef de doel-naamruimte (bijvoorbeeld
team1-apps) een label dat overeenkomt met de selector met behulp van deaz aks command invokeopdracht.az aks command invoke \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --command " kubectl create namespace team1-apps --dry-run=client -o yaml | kubectl apply -f - kubectl label namespace team1-apps tenant=team1 --overwrite "U kunt nu de load balancers in het cluster weergeven om de meerdere configuraties te bekijken met behulp van de
az aks loadbalancer listopdracht.az aks loadbalancer list --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --output tableVoorbeelduitvoer:
AllowServicePlacement ETag Name PrimaryAgentPoolName ProvisioningState ResourceGroup ----------------------- ------- ---------- ---------------------- ------------------- --------------- True <ETAG> kubernetes nodepool1 Succeeded rg-aks-multislb True <ETAG> team1-lb team1pool Succeeded rg-aks-multislb
Een service implementeren in een specifieke load balancer
Voeg de aantekening service.beta.kubernetes.io/azure-load-balancer-configurations toe met een door komma's gescheiden lijst met configuratienamen. Als de aantekening wordt weggelaten, kiest de controller automatisch.
az aks command invoke \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--command "
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
name: lb-svc-1
namespace: team1-apps
labels:
app: nginx-test
annotations:
service.beta.kubernetes.io/azure-load-balancer-configurations: \"team1-lb\"
# service.beta.kubernetes.io/azure-load-balancer-internal: "true" # If you want to create an internal load balancer.
spec:
selector:
app: nginx-test
ports:
- name: port1
port: 80
targetPort: 80
protocol: TCP
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test
namespace: team1-apps
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx-test
template:
metadata:
labels:
app: nginx-test
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
cpu: \"150m\"
memory: \"300Mi\"
EOF
"
Knooppunten opnieuw verdelen (optioneel)
Voer een herbalance-bewerking uit na het schalen als regelaantallen met behulp van de az aks loadbalancer rebalance opdracht niet meer in balans zijn. Met deze opdracht worden actieve datastromen onderbroken, dus voer deze uit tijdens een onderhoudsvenster.
az aks loadbalancer rebalance --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME
Bewaking en problemen oplossen
- Bekijk controller-gebeurtenissen (
kubectl get events …) om te verifiëren dat diensten zijn afgestemd. - Als externe connectiviteit is geblokkeerd, opent u een node-shell en gebruikt u de curl-opdracht om de Service-VIP aan te spreken om de kube-proxy routing te bevestigen.
Beperkingen en bekende problemen
| Beperking | Bijzonderheden |
|---|---|
| Uitgaande SNAT | Maakt altijd gebruik van de eerste SLB; uitgaande stromen worden niet opgesplitst. |
| Type back-end pool | Maak of werk een bestaand cluster bij om de back-endpools te gebruiken nodeIP. |
| Autoscaler op nul zetten | Een primaire agentpool kan niet worden geschaald naar 0 knooppunten. |
Groei van ETP-regels local |
Elke ETP-service local maakt gebruik van een eigen regel- en back-endpool, zodat regelaantallen sneller kunnen groeien dan met cluster de modus. |
| Onderbreking opnieuw verdelen | Als u een knooppunt uit een back-endpool verwijdert, worden de verbindingen tijdens de vlucht verwijderd. Onderhoudsvensters plannen. |
| Tijdstip voor het opnieuw laden van configuratie | Nadat az aks loadbalancer is uitgevoerd, worden wijzigingen mogelijk niet onmiddellijk van kracht. De AKS-bewerking wordt snel voltooid, maar het kan langer duren voordat updates worden toegepast in de cloudcontrollerbeheer. Wacht totdat de EnsuredLoadBalancer gebeurtenis bevestigt dat de wijzigingen actief zijn. |
De hulpbronnen opschonen
Verwijder de resourcegroep wanneer u klaar bent om het cluster en de load balancers te verwijderen met behulp van de az group delete opdracht.
az group delete --name $RESOURCE_GROUP --yes --no-wait
Volgende stappen
Met de functie meerdere SLB kunt u workloads op de netwerklaag schalen en isoleren, terwijl u de eenvoud behoudt via de door Azure beheerde configuratie. Zie de volgende bronnen voor meer informatie: