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 VNET of in een ander VNET bevinden via VNET-peering. In dit artikel leest u hoe u een interne load balancer maakt en gebruikt met AKS.
Belangrijk
Op 30 september 2025 wordt Basic Load Balancer buiten gebruik gesteld. Zie de officiële aankondiging voor meer informatie. Als u momenteel Basic Load Balancer gebruikt, moet u een upgrade uitvoeren naar Standard Load Balancer vóór de buitengebruikstellingsdatum. Voor hulp bij het upgraden gaat u naar Upgraden vanuit Basic Load Balancer - Richtlijnen.
Voordat u begint
- In dit artikel wordt ervan uitgegaan dat u een bestaand AKS-cluster hebt. Als u een AKS-cluster nodig hebt, kunt u er een maken met behulp van Azure CLI, Azure PowerShell of Azure Portal.
- U hebt Azure CLI versie 2.0.59 of hoger nodig. Voer
az --version
uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren. - Als u een bestaand subnet of resourcegroep wilt gebruiken, moet de AKS-clusteridentiteit zijn gemachtigd om netwerkresources te beheren. Zie Kubenet-netwerken gebruiken met uw eigen IP-adresbereiken in AKS of Azure CNI-netwerken configureren in AKS voor meer informatie. Als u uw load balancer configureert voor het gebruik van een IP-adres in een ander subnet, moet u ervoor zorgen dat de AKS-clusteridentiteit ook leestoegang heeft tot dat subnet.
- Zie AKS-toegang tot andere Azure-resources delegeren voor meer informatie over machtigingen.
Een interne load balancer maken
Maak een servicemanifest met de naam
internal-lb.yaml
van het servicetypeLoadBalancer
en deazure-load-balancer-internal
aantekening.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
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
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.
Belangrijk
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.
- Serviceaantekeningen instellen
- De eigenschap LoadBalancerIP toevoegen aan het YAML-manifest van de load balancer
Serviceaantekeningen instellen die worden gebruikt
service.beta.kubernetes.io/azure-load-balancer-ipv4
voor een IPv4-adres enservice.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
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
Verbinding maken met Azure Private Link-service met interne load balancer
Voordat u begint
- U hebt Kubernetes versie 1.22.x of hoger nodig.
- U hebt een bestaande resourcegroep met een VNet en subnet nodig. In deze resourcegroep maakt u het privé-eindpunt. Zie Een virtueel netwerk en subnet maken als u deze resources niet hebt.
Een Private Link-serviceverbinding maken
Maak een servicemanifest met de naam
internal-lb-pls.yaml
van het servicetypeLoadBalancer
en deazure-load-balancer-internal
aantekeningen.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
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
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
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
De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:
Name Alias -------- ------------------------------------------------------------------------- pls-xyz pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
Een privé-eindpunt maken voor de Private Link-service
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:
Aantekening | Weergegeven als | Beschrijving | Vereist | Standaardinstelling |
---|---|---|---|---|
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 wordt geïmplementeerd. Dit subnet moet zich in hetzelfde VNET 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 spaties gescheiden lijst met fqdns 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. Houd er rekening mee dat de back-endservice het PROXY-protocol moet ondersteunen of dat de verbindingen mislukken. | 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 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 '*'. | Optioneel | [] |
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
Notitie
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-adresEXTERNAL-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 services 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.
Azure Kubernetes Service