Delen via


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.

Important

Op 30 september 2025 wordt Basic Load Balancer buiten gebruik gesteld. Zie de officiële aankondiging voor meer informatie. Er is geen geïntegreerde optie om de Azure AKS-API-bewerking te gebruiken om de Load Balancer-SKU te migreren. De SKU-beslissing van Load Balancer moet worden uitgevoerd tijdens het maken van het cluster. Als u momenteel Basic Load Balancer gebruikt, moet u daarom de benodigde stappen uitvoeren om uw workloads te migreren naar een nieuw aangemaakt cluster met de nieuwe standaard Load Balancer-SKU vóór de datum van buitengebruikstelling.

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 opgeeft voor de load balancer, moet het opgegeven IP-adres zich in hetzelfde virtuele netwerk bevinden als het AKS-cluster, maar kan het nog niet worden toegewezen aan een andere resource in het virtuele netwerk. U moet bijvoorbeeld geen IP-adres gebruiken in het bereik dat is aangewezen voor het Kubernetes-subnet in het AKS-cluster. Als u een IP-adres gebruikt dat al is toegewezen aan een andere resource in hetzelfde virtuele netwerk, kan dit problemen veroorzaken met de load balancer.

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.

Important

Het toevoegen van de eigenschap LoadBalancerIP 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 LoadBalancer 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
    
  1. 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.

Voordat u begint

  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-serviceobject gemaakt dat verbinding maakt met de front-end-IP-configuratie van de load balancer die is gekoppeld aan de Kubernetes-service.

    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.

    # Create a variable for the private link service
    
    AKS_PLS_ID=$(az network private-link-service list -g $AKS_MC_RG --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
    

PLS-aanpassingen via aantekeningen

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

Annotation Value Description Required Default
service.beta.kubernetes.io/azure-pls-create "true" Booleaanse waarde die aangeeft of er een PLS moet worden gemaakt. Required
service.beta.kubernetes.io/azure-pls-name <PLS name> Tekenreeks die de naam opgeeft van de PLS-resource die moet worden gemaakt. Optional "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 Optional 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. Optional 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. Optional 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. Optional Alle IP-adressen worden dynamisch toegewezen.
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 verbindingen mislukken. Optional 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). Optional Lege lijst [] die alleen op rollen gebaseerd toegangsbeheer aangeeft: deze private link-service is alleen beschikbaar voor personen met op rollen gebaseerd toegangsbeheermachtigingen in uw directory. (Meest beperkend)
service.beta.kubernetes.io/azure-pls-auto-approval "sub1 sub2 sub3 … subN" Een door spaties gescheiden lijst met Azure-abonnements-id's. Hierdoor kunnen PE-verbindingsaanvragen van de vermelde abonnementen naar de PLS automatisch worden goedgekeurd. Dit werkt alleen wanneer zichtbaarheid is ingesteld op "*". Optional []

Privénetwerken gebruiken

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 dezelfde resourcegroep als uw AKS-cluster, maar is in plaats daarvan verbonden met uw particuliere virtuele 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

Note

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
    

De load balancer verwijderen

De load balancer wordt verwijderd wanneer alle diensten worden verwijderd.

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.