Een interne load balancer gebruiken met Azure Kubernetes Service (AKS)

U kunt een interne load balancer maken en gebruiken om de toegang tot uw toepassingen in Azure Kubernetes Service (AKS) te beperken. Een interne load balancer heeft geen openbaar IP-adres en maakt een Kubernetes-service alleen toegankelijk voor toepassingen die het privé-IP-adres kunnen bereiken. Deze toepassingen kunnen zich binnen hetzelfde virtuele netwerk of in een ander virtueel netwerk bevinden via peering van virtuele netwerken. In dit artikel leest u hoe u een interne load balancer maakt en gebruikt met AKS.

Belangrijk

Vanaf 30 september 2025 biedt Azure Kubernetes Service (AKS) geen ondersteuning meer voor Basic Load Balancer. Om mogelijke serviceonderbrekingen te voorkomen, raden we u aan Standard Load Balancer te gebruiken voor nieuwe implementaties en bestaande implementaties te upgraden naar de Standard Load Balancer. Zie voor meer informatie over deze afschaffing, het GitHub-issue over de afschaffing en de aankondiging over de afschaffing van Azure Updates. Als u op de hoogte wilt blijven van aankondigingen en updates, volg de AKS-release-opmerkingen.

Voordat u begint

Een interne load balancer maken

  1. Maak een servicemanifest met de naam internal-lb.yaml van het servicetype LoadBalancer en de azure-load-balancer-internal annotatie.

    apiVersion: v1
    kind: Service
    metadata:
      name: internal-app
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: internal-app
    
  2. Implementeer de interne load balancer met behulp van de kubectl apply opdracht. Met deze opdracht maakt u een Azure Load Balancer in de knooppuntresourcegroep die is verbonden met hetzelfde virtuele netwerk als uw AKS-cluster.

    kubectl apply -f internal-lb.yaml
    
  3. Bekijk de servicedetails met behulp van de kubectl get service opdracht.

    kubectl get service internal-app
    

    Het IP-adres van de interne load balancer wordt weergegeven in de EXTERNAL-IP kolom, zoals wordt weergegeven in de volgende voorbeelduitvoer. In deze context verwijst Extern naar de externe interface van de load balancer. Het betekent niet dat het een openbaar, extern IP-adres ontvangt. Dit IP-adres wordt dynamisch toegewezen vanuit hetzelfde subnet als het AKS-cluster.

    NAME           TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    internal-app   LoadBalancer   10.0.248.59   10.240.0.7    80:30555/TCP   2m
    

Een IP-adres opgeven

Wanneer u een IP-adres voor de load balancer opgeeft, moet het IP-adres beschikbaar zijn binnen het subnet dat door de load balancer wordt gebruikt. De load balancer gebruikt standaard hetzelfde subnet als het AKS-cluster. Gebruik geen Azure gereserveerd IP-adres, een IP-adres dat al is toegewezen aan een andere resource of een IP-adres van de Kubernetes-service-CIDR.

U kunt de az network vnet subnet list Azure CLI-opdracht of de Get-AzVirtualNetworkSubnetConfig PowerShell-cmdlet gebruiken om de subnetten in uw virtuele netwerk op te halen.

Zie Een knooppuntgroep met een uniek subnet toevoegen voor meer informatie over subnetten.

Als u een specifiek IP-adres met de load balancer wilt gebruiken, hebt u twee opties: serviceaantekeningen instellen of de eigenschap LoadBalancerIP toevoegen aan het YAML-manifest van de load balancer.

Belangrijk

Het toevoegen van de LoadBalancerIP eigenschap aan het YAML-manifest van de load balancer wordt afgeschaft na upstream Kubernetes. Hoewel het huidige gebruik hetzelfde blijft en bestaande services naar verwachting zonder aanpassingen werken, raden we u ten zeerste aan serviceaantekeningen in te stellen. Zie Azure Load Balancer ondersteunde aantekeningen voor meer informatie over serviceaantekeningen.

  1. Serviceannotaties instellen met service.beta.kubernetes.io/azure-load-balancer-ipv4 voor een IPv4-adres en service.beta.kubernetes.io/azure-load-balancer-ipv6 voor een IPv6-adres.

    apiVersion: v1
    kind: Service
    metadata:
      name: internal-app
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-ipv4: 10.240.0.25
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: internal-app
    
  2. Bekijk de servicedetails met behulp van de kubectl get service opdracht.

    kubectl get service internal-app
    

    Het IP-adres in de EXTERNAL-IP kolom moet overeenkomen met het opgegeven IP-adres, zoals wordt weergegeven in de volgende voorbeelduitvoer:

    NAME           TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    internal-app   LoadBalancer   10.0.184.168   10.240.0.25   80:30225/TCP   4m
    

Zie Een ander subnet opgeven voor meer informatie over het configureren van uw load balancer in een ander subnet.

Belangrijk

Private Link Service heeft de volgende beperkingen:

  • Private Link Service ondersteunt alleen IPv4-verkeer en ondersteunt alleen de TCP- en UDP-transportprotocollen.
  • Als de service gebruikmaakt van externalTrafficPolicy: Local, moet het subnet van de Private Link Service verschillen van het podsubnet. Als u hetzelfde subnet wilt gebruiken, stelt u in op externalTrafficPolicyCluster.
  • Als u het PROXY-protocol inschakelt en gebruikt externalTrafficPolicy: Local, moet u een aangepaste statustest configureren omdat de standaardstatustest mislukt.

Zie Private Link Service-beperkingen en Azure Private Link Service-integratiebeperkingen voor meer informatie.

  1. Maak een servicemanifest genaamd internal-lb-pls.yaml met het service type LoadBalancer en de annotaties azure-load-balancer-internal en azure-pls-create. Raadpleeg het ontwerpdocument voor azure Private Link Service Integration voor meer opties.

    apiVersion: v1
    kind: Service
    metadata:
      name: internal-app
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
        service.beta.kubernetes.io/azure-pls-create: "true"
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: internal-app
    
  2. Implementeer de interne load balancer met behulp van de kubectl apply opdracht. Met deze opdracht maakt u een Azure Load Balancer in de knooppuntresourcegroep die is verbonden met hetzelfde virtuele netwerk als uw AKS-cluster. Er wordt ook een Private Link Service-object gemaakt dat verbinding maakt met de front-end-IP-configuratie van de interne load balancer die is gekoppeld aan het Kubernetes-serviceobject.

    kubectl apply -f internal-lb-pls.yaml
    
  3. Bekijk de servicedetails met behulp van de kubectl get service opdracht.

    kubectl get service internal-app
    

    Het IP-adres van de interne load balancer wordt weergegeven in de EXTERNAL-IP kolom, zoals wordt weergegeven in de volgende voorbeelduitvoer. In deze context verwijst Extern naar de externe interface van de load balancer. Het betekent niet dat het een openbaar, extern IP-adres ontvangt.

    NAME           TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    internal-app   LoadBalancer   10.125.17.53  10.125.0.66   80:30430/TCP   64m
    
  4. Bekijk de details van het Private Link-serviceobject met behulp van de az network private-link-service list opdracht.

    # Create a variable for the node resource group
    
    AKS_MC_RG=$(az aks show -g myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv)
    
    # View the details of the Private Link Service object
    
    az network private-link-service list -g $AKS_MC_RG --query "[].{Name:name,Alias:alias}" -o table
    

    Uw output zou eruit moeten zien zoals de volgende voorbeeldoutput.

    Name      Alias
    --------  -------------------------------------------------------------------------
    pls-xyz   pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
    

Met een privé-eindpunt kunt u privé verbinding maken met uw Kubernetes-serviceobject via de Private Link-service die u hebt gemaakt.

Maak het privé-eindpunt met behulp van de az network private-endpoint create opdracht. Vervang pls-xyz door de Private Link Service-naam die in de vorige stap is geretourneerd.

Stel --resource-group in op de doelresourcegroep waar u het privé-eindpunt wilt maken. Stel --vnet-name en --subnet in op het virtuele netwerk en subnet dat het privé-eindpunt bevat. Stel --private-connection-resource-id in op de resource-ID van de Private Link Service die is opgehaald in AKS_PLS_ID.

# Create variables for the Private Link Service

AKS_PLS_NAME=pls-xyz
AKS_PLS_ID=$(az network private-link-service show -g $AKS_MC_RG --name $AKS_PLS_NAME --query id -o tsv)

# Create the private endpoint

az network private-endpoint create \
    -g myOtherResourceGroup \
    --name myAKSServicePE \
    --vnet-name myOtherVNET \
    --subnet pe-subnet \
    --private-connection-resource-id $AKS_PLS_ID \
    --connection-name connectToMyK8sService

U kunt de volgende aantekeningen gebruiken om de PLS-resource aan te passen:

Annotatie Waarde Beschrijving Vereist Standaard
service.beta.kubernetes.io/azure-pls-create "true" Booleaanse waarde die aangeeft of er een PLS moet worden gemaakt. Vereist
service.beta.kubernetes.io/azure-pls-name <PLS name> Tekenreeks die de naam opgeeft van de PLS-resource die moet worden gemaakt. Optioneel "pls-<LB frontend config name>"
service.beta.kubernetes.io/azure-pls-resource-group Resource Group name Tekenreeks die de naam opgeeft van de resourcegroep waarin de PLS-resource wordt gemaakt Optioneel MC_resource
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet <Subnet name> Tekenreeks die het subnet aangeeft waarop de PLS is geïmplementeerd. Dit subnet moet zich in hetzelfde virtuele netwerk bevinden als de back-endpool. PLS NAT IP-adressen worden toegewezen binnen dit subnet. Optioneel Als service.beta.kubernetes.io/azure-load-balancer-internal-subnet dit ILB-subnet wordt gebruikt. Anders wordt het standaardsubnet van het configuratiebestand gebruikt.
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count [1-8] Totaal aantal privé-NAT-IP's dat moet worden toegewezen. Optioneel 1
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address "10.0.0.7 ... 10.0.0.10" Een door ruimte gescheiden lijst met statische IP-adressen van IPv4 die moeten worden toegewezen. (IPv6 wordt momenteel niet ondersteund.) Het totale aantal IP-adressen mag niet groter zijn dan het ip-aantal dat is opgegeven in service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count. Als er minder IP-adressen zijn opgegeven, worden de rest dynamisch toegewezen. Het eerste IP-adres in de lijst is ingesteld als Primary. Optioneel Alle IP-adressen worden dynamisch toegewezen.
service.beta.kubernetes.io/azure-pls-fqdns "fqdn1 fqdn2" Een door spatie gescheiden lijst met volledig gekwalificeerde domeinnamen die zijn gekoppeld aan de PLS. Optioneel []
service.beta.kubernetes.io/azure-pls-proxy-protocol "true" of "false" Booleaanse waarde die aangeeft of het TCP PROXY-protocol moet worden ingeschakeld op de PLS om verbindingsgegevens door te geven, inclusief de koppelings-id en het bron-IP-adres. De back-endservice MOET het PROXY-protocol ondersteunen of de verbinding mislukt. Optioneel false
service.beta.kubernetes.io/azure-pls-visibility "sub1 sub2 sub3 … subN" of "*" Een door spaties gescheiden lijst met Azure abonnements-id's waarvoor de Private Link Service zichtbaar is. Gebruik "*" dit om de PLS beschikbaar te maken voor alle subs (minst beperkend). Optioneel Lege lijst [] die alleen op rollen gebaseerd toegangsbeheer aangeeft: deze Private Link Service is alleen beschikbaar voor gebruikers met de vereiste Azure RBAC-machtigingen, inclusief geautoriseerde gebruikers in tenants. (Meest beperkend)
service.beta.kubernetes.io/azure-pls-auto-approval "sub1 sub2 sub3 … subN" Een door spatie gescheiden lijst met Azure abonnements-id's waarvan de PE-verbindingsaanvragen voor de PLS automatisch worden goedgekeurd. De lijst voor automatische goedkeuring moet een subset van de zichtbaarheidslijst zijn. Optioneel []

Een interne load balancer gebruiken met privénetwerken

Wanneer u uw AKS-cluster maakt, kunt u geavanceerde netwerkinstellingen opgeven. Met deze instellingen kunt u het cluster implementeren in een bestaand virtueel Azure-netwerk en -subnetten. U kunt uw AKS-cluster bijvoorbeeld implementeren in een particulier netwerk dat is verbonden met uw on-premises omgeving en services uitvoeren die alleen intern toegankelijk zijn.

Zie Uw eigen subnetten voor virtuele netwerken configureren met Kubenet of met Azure CNI voor meer informatie.

U hoeft geen wijzigingen aan te brengen in de vorige stappen om een interne load balancer te implementeren die gebruikmaakt van een particulier netwerk in een AKS-cluster. De load balancer wordt gemaakt in de knooppuntresourcegroep voor uw AKS-cluster en verbonden met uw virtuele privénetwerk en subnet, zoals wordt weergegeven in het volgende voorbeeld:

kubectl get service internal-app

NAME           TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
internal-app   LoadBalancer   10.1.15.188   10.0.0.35     80:31669/TCP   1m

Opmerking

De clusteridentiteit die door het AKS-cluster wordt gebruikt, moet ten minste de rol Netwerkbijdrager hebben op de resource van het virtuele netwerk. U kunt de clusteridentiteit weergeven met behulp van de az aks show opdracht, zoals az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity". U kunt de rol Inzender voor netwerken toewijzen met behulp van de az role assignment create opdracht, zoals az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor".

Als u in plaats daarvan een aangepaste rol wilt definiëren, hebt u de volgende machtigingen nodig:

  • Microsoft.Network/virtualNetworks/subnets/join/action
  • Microsoft.Network/virtualNetworks/subnets/read

Zie Een subnet van een virtueel netwerk toevoegen, wijzigen of verwijderen voor meer informatie.

Een ander subnet opgeven

Voeg de azure-load-balancer-internal-subnet aantekening toe aan uw service om een subnet voor uw load balancer op te geven. Het opgegeven subnet moet zich in hetzelfde virtuele netwerk bevinden als uw AKS-cluster. Wanneer het is geïmplementeerd, maakt het load balancer-adres EXTERNAL-IP deel uit van het opgegeven subnet.

apiVersion: v1
kind: Service
metadata:
  name: internal-app
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "apps-subnet"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: internal-app

Stel de service.beta.kubernetes.io/azure-load-balancer-internal-subnet aantekeningswaarde in op de naamtekenreeks van het subnet, zoals "apps-subnet".

De load balancer verwijderen

De load balancer wordt verwijderd wanneer u alle Kubernetes-services verwijdert.

Net als bij elke Kubernetes-resource kunt u rechtstreeks een service verwijderen, zoals kubectl delete service internal-app, waarmee ook de onderliggende Azure-load balancer wordt verwijderd.

Volgende stappen

Zie de Documentatie voor Kubernetes-services voor meer informatie over Kubernetes-services.