Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können zum Einschränken des Zugriffs auf Ihre Anwendungen in Azure Kubernetes Service (AKS) einen internen Lastenausgleich erstellen und verwenden. Ein interner Lastenausgleich besitzt keine öffentliche IP-Adresse und macht einen Kubernetes-Dienst nur für Anwendungen zugänglich, die die private IP-Adresse erreichen können. Diese Anwendungen können sich innerhalb desselben virtuellen Netzwerks oder in einem anderen virtuellen Netzwerk über virtuelles Netzwerk-Peering befinden. In diesem Artikel wird veranschaulicht, wie Sie einen internen Lastenausgleich mit AKS erstellen und verwenden.
Wichtig
Ab dem 30. September 2025 unterstützt Azure Kubernetes Service (AKS) den Basic Load Balancer nicht mehr. Um potenzielle Dienstunterbrechungen zu vermeiden, empfehlen wir die Verwendung des Standardlastenausgleichs für neue Bereitstellungen und das Aktualisieren vorhandener Bereitstellungen auf den Standardlastenausgleich. Weitere Informationen zu dieser Abkündigung finden Sie im GitHub-Issue "Retirement" und in der Azure Updates Ankündigung zur Abkündigung. Um über Ankündigungen und Updates auf dem Laufenden zu bleiben, folgen Sie den AKS-Versionshinweisen.
Bevor Sie beginnen
- Dieser Artikel setzt voraus, dass Sie über ein vorhandenes AKS-Cluster verfügen. Wenn Sie einen AKS-Cluster benötigen, können Sie einen mithilfe der Azure CLI, von Azure PowerShell oder des Azure-Portals erstellen.
- Sie benötigen mindestens Version 2.0.59 der Azure CLI. Führen Sie
az --versionaus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI. - Wenn Sie ein bestehendes Subnetz oder eine vorhandene Ressourcengruppe verwenden möchten, benötigt die AKS-Clusteridentität die Berechtigung zum Verwalten von Netzwerkressourcen. Weitere Informationen finden Sie unter Konfigurieren von Azure CNI-Netzwerken in AKS. Wenn Sie das Load Balancer für die Verwendung einer IP-Adresse in einem anderen Subnetz konfigurieren, sollten Sie sicherstellen, dass die AKS-Clusteridentität auch Zugriff auf dieses Subnetz hat
Read.- Weitere Informationen zu Berechtigungen finden Sie unter Delegieren des AKS-Zugriffs auf andere Azure-Ressourcen.
Erstellen Sie einen internen Load Balancer
Erstellen Sie ein Dienstmanifest namens
internal-lb.yamlmit dem DiensttypLoadBalancerund der Anmerkungazure-load-balancer-internal.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-appStellen Sie den internen Lastenausgleich mit dem Befehl
kubectl applybereit. Mit diesem Befehl wird ein Azure-Lastenausgleich in der Knotenressourcengruppe erstellt, die mit demselben virtuellen Netzwerk wie der AKS-Cluster verbunden ist.kubectl apply -f internal-lb.yamlZeigen Sie die Dienstdetails mithilfe des Befehls
kubectl get servicean.kubectl get service internal-appDie IP-Adresse des internen Lastenausgleichs wird in der Spalte
EXTERNAL-IPangezeigt, wie in der folgenden Beispielausgabe gezeigt. In diesem Kontext bezieht sich External auf die externe Schnittstelle des Lastenausgleichs. Es bedeutet nicht, dass er eine öffentliche, externe IP-Adresse erhält. Diese IP-Adresse wird dynamisch aus dem Subnetz zugewiesen, in dem sich auch der AKS-Cluster befindet.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.248.59 10.240.0.7 80:30555/TCP 2m
Angeben einer IP-Adresse
Wenn Sie eine IP-Adresse für den Load Balancer angeben, muss diese IP-Adresse im vom Load Balancer verwendeten Subnetz verfügbar sein. Standardmäßig verwendet der Lastenausgleich dasselbe Subnetz wie der AKS-Cluster. Verwenden Sie keine Azure reservierte IP-Adresse, keine IP-Adresse, die bereits einer anderen Ressource zugewiesen ist, oder eine IP-Adresse aus dem Kubernetes-Dienst CIDR.
Sie können den Azure CLI-Befehl az network vnet subnet list oder das PowerShell-Cmdlet Get-AzVirtualNetworkSubnetConfig verwenden, um die Subnetze in Ihrem virtuellen Netzwerk abzurufen.
Weitere Informationen zu Subnetzen finden Sie unter Hinzufügen eines Knotenpools mit einem eindeutigen Subnetz.
Wenn Sie eine bestimmte IP-Adresse mit dem Lastenausgleich verwenden möchten, haben Sie zwei Möglichkeiten: Dienstanmerkungen festlegen oder die LoadBalancerIP-Eigenschaft zum YAML-Lastenausgleichsmanifest hinzufügen.
Wichtig
Das Hinzufügen der LoadBalancerIP-Eigenschaft zum Load Balancer YAML-Manifest des Lastenausgleichs ist nach der Upstreamversion von Kubernetes veraltet. Auch wenn der aktuelle Verbrauch unverändert bleibt und von vorhandenen Diensten erwartet wird, dass sie ohne Änderungen funktionieren, wird dringend empfohlen, stattdessen Dienstanmerkungen festzulegen. Weitere Informationen zu Dienstanmerkungen finden Sie unter Azure Load Balancer unterstützte Anmerkungen.
- Dienstanmerkungen festlegen
-
Hinzufügen der
LoadBalancerIPEigenschaft zum YAML-Manifest des Lastenausgleichs
Legen Sie Dienstanmerkungen mithilfe von
service.beta.kubernetes.io/azure-load-balancer-ipv4für eine IPv4-Adresse undservice.beta.kubernetes.io/azure-load-balancer-ipv6für eine IPv6-Adresse fest.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-appZeigen Sie die Dienstdetails mithilfe des Befehls
kubectl get servicean.kubectl get service internal-appDie IP-Adresse in der Spalte
EXTERNAL-IPsollte ihre angegebene IP-Adresse widerspiegeln, wie in der folgenden Beispielausgabe gezeigt:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.184.168 10.240.0.25 80:30225/TCP 4m
Weitere Informationen zum Konfigurieren Ihres Lastenausgleichs in einem anderen Subnetz finden Sie unter Angeben eines anderen Subnetzes.
Verbinden des Azure Private Link-Diensts mit einem internen AKS-Lastenausgleichsmodul
Private Link Serviceanforderungen
- Ihr Cluster muss eine unterstützte Kubernetes-Version in AKS ausführen.
- Ihr AKS-Cluster muss einen Load Balancer Standard mit dem Back-End-Pooltyp
nodeIPConfigurationverwenden. Der Private Link-Dienst unterstützt weder den Basic Load Balancer noch den IP-basierten Typ desnodeIPBack-End-Pools. Weitere Informationen finden Sie unter Private Link Dienstbeschränkungen. - Sie benötigen eine vorhandene Ressourcengruppe mit einem virtuellen Netzwerk und Subnetz. In dieser Ressourcengruppe erstellen Sie den privaten Endpunkt. Wenn Sie nicht über diese Ressourcen verfügen, lesen Sie die Informationen unter Erstellen eines virtuellen Netzwerks und des Subnetzes.
Wichtig
Private Link Dienst hat die folgenden Einschränkungen:
- Private Link Dienst unterstützt nur IPv4-Datenverkehr und unterstützt nur die TCP- und UDP-Transportprotokolle.
- Wenn der Dienst
externalTrafficPolicy: Localverwendet, muss sich das Subnetz des Private Link-Diensts vom Pod-Subnetz unterscheiden. Um dasselbe Subnetz zu verwenden, setzen SieexternalTrafficPolicyaufCluster. - Wenn Sie das PROXY-Protokoll aktivieren und verwenden
externalTrafficPolicy: Local, müssen Sie einen benutzerdefinierten Integritätstest konfigurieren, da der Standardintegritätstest fehlschlägt.
Weitere Informationen finden Sie unter Private Link Diensteinschränkungen und Azure Private Link Dienstintegrationseinschränkungen.
Erstellen einer Private Link Dienstverbindung
Erstellen Sie ein Dienstmanifest namens
internal-lb-pls.yamlmit dem DiensttypLoadBalancerund den Anmerkungenazure-load-balancer-internalundazure-pls-create. Weitere Optionen finden Sie im Entwurfsdokument zur Azure Private Link-Dienstintegration.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-appStellen Sie den internen Lastenausgleich mit dem Befehl
kubectl applybereit. Mit diesem Befehl wird ein Azure-Lastenausgleich in der Knotenressourcengruppe erstellt, die mit demselben virtuellen Netzwerk wie der AKS-Cluster verbunden ist. Außerdem wird ein Private Link Service-Objekt erstellt, das eine Verbindung mit der Frontend-IP-Konfiguration des internen Lastenausgleichs herstellt, der dem Kubernetes-Dienstobjekt zugeordnet ist.kubectl apply -f internal-lb-pls.yamlZeigen Sie die Dienstdetails mithilfe des Befehls
kubectl get servicean.kubectl get service internal-appDie IP-Adresse des internen Lastenausgleichs wird in der Spalte
EXTERNAL-IPangezeigt, wie in der folgenden Beispielausgabe gezeigt. In diesem Kontext bezieht sich External auf die externe Schnittstelle des Lastenausgleichs. Es bedeutet nicht, dass er eine öffentliche, externe IP-Adresse erhält.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.125.17.53 10.125.0.66 80:30430/TCP 64mZeigen Sie die Details des Private Link-Dienstobjekts mithilfe des Befehls
az network private-link-service listan.# 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 tableIhre Ausgabe sollte in etwa dem folgendem Beispiel entsprechen:
Name Alias -------- ------------------------------------------------------------------------- pls-xyz pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
Erstellen eines privaten Endpunkts für den Private Link Dienst
Mit einem privaten Endpunkt können Sie eine private Verbindung mit Ihrem Kubernetes-Dienstobjekt über den von Ihnen erstellten Private Link-Dienst herstellen.
Erstellen Sie den privaten Endpunkt mithilfe des Befehls az network private-endpoint create. Ersetzen Sie pls-xyz durch den Private Link-Dienstnamen, der im vorherigen Schritt zurückgegeben wurde.
Legen Sie diese --resource-group Einstellung auf die Zielressourcengruppe fest, in der Sie den privaten Endpunkt erstellen möchten. Legen Sie --subnet und --vnet-name auf das virtuelle Netzwerk und das Subnetz fest, die den privaten Endpunkt enthalten. Legen Sie --private-connection-resource-id auf die Ressourcen-ID des Private Link-Diensts fest, die in AKS_PLS_ID abgerufen wurde.
# 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
Anpassungen des Private Link Service über Annotationen
Mit den folgenden Anmerkungen können Sie die PLS-Ressource anpassen:
| Anmerkung | Wert | Beschreibung | Erforderlich | Voreinstellung |
|---|---|---|---|---|
service.beta.kubernetes.io/azure-pls-create |
"true" |
Ein boolescher Wert, der angibt, ob ein PLS erstellt werden muss | Erforderlich | |
service.beta.kubernetes.io/azure-pls-name |
<PLS name> |
Eine Zeichenfolge, die den Namen der zu erstellenden PLS-Ressource angibt | Optional | "pls-<LB frontend config name>" |
service.beta.kubernetes.io/azure-pls-resource-group |
Resource Group name |
Zeichenfolge, die den Namen der Ressourcengruppe angibt, in der die PLS-Ressource erstellt wird | Optional | MC_resource |
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet |
<Subnet name> |
Zeichenfolge, die das Subnetz angibt, in dem die PLS bereitgestellt wird. Dieses Subnetz muss im selben virtuellen Netzwerk wie der Back-End-Pool vorhanden sein. PLS-NAT-IPs werden in diesem Subnetz zugeordnet. | Optional | Wenn der Wert service.beta.kubernetes.io/azure-load-balancer-internal-subnet lautet, wird dieses ILB-Subnetz verwendet. Andernfalls wird das Standardsubnetz aus der Konfigurationsdatei verwendet. |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count |
[1-8] |
Die Gesamtzahl der privaten NAT-IPs, die zugewiesen werden sollen | Optional | 1 |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address |
"10.0.0.7 ... 10.0.0.10" |
Eine durch Leerzeichen getrennte Liste statischer IPv4-Adressen, die zugewiesen werden sollen. (IPv6 wird zur zeit nicht unterstützt.) Die Gesamtanzahl der IPs sollte nicht größer sein als die in service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count. Wenn weniger IPs angegeben sind, werden die restlichen dynamisch zugeordnet. Die erste IP in der Liste wird als Primary festgelegt. |
Optional | Alle IPs werden dynamisch zugeordnet. |
service.beta.kubernetes.io/azure-pls-fqdns |
"fqdn1 fqdn2" |
Eine durch Leerzeichen getrennte Liste vollqualifizierter Domänennamen, die der PLS zugeordnet sind. | Optional | [] |
service.beta.kubernetes.io/azure-pls-proxy-protocol |
"true" oder "false" |
Ein boolescher Wert, der angibt, ob das TCP-Proxyprotokoll auf dem PLS aktiviert werden soll, um Verbindungsinformationen zu übergeben, einschließlich der Link-ID und der Quell-IP-Adresse. Der Back-End-Dienst MUSS das PROXY-Protokoll unterstützen, oder die Verbindung schlägt fehl. | Optional | false |
service.beta.kubernetes.io/azure-pls-visibility |
"sub1 sub2 sub3 … subN" oder "*" |
Eine durch Leerzeichen getrennte Liste von Azure Abonnement-IDs, für die der Private Link Dienst sichtbar ist. Verwenden Sie "*", um den PLS für alle Abonnements sichtbar zu machen (am wenigsten restriktiv). |
Optional | Leere Liste[], die nur die rollenbasierte Zugriffssteuerung angibt: Dieser Private Link Dienst ist nur für Benutzer mit den erforderlichen Azure RBAC-Berechtigungen verfügbar, einschließlich autorisierter Benutzer über Mandanten hinweg. (am restriktivsten). |
service.beta.kubernetes.io/azure-pls-auto-approval |
"sub1 sub2 sub3 … subN" |
Eine durch Leerzeichen getrennte Liste von Azure Abonnement-IDs, deren PE-Verbindungsanforderungen an die PLS automatisch genehmigt werden. Die Liste der automatischen Genehmigung muss eine Teilmenge der Sichtbarkeitsliste sein. | Optional | [] |
Verwenden Sie einen internen Load Balancer mit privaten Netzwerken
Beim Erstellen des AKS-Clusters können Sie erweiterte Netzwerkeinstellungen angeben. Mit diesen Einstellungen können Sie den Cluster in einem vorhandenen virtuellen Azure-Netzwerk und in Subnetzen bereitstellen. Sie können beispielsweise den AKS-Cluster in einem privaten Netzwerk bereitstellen, das mit Ihrer lokalen Umgebung verbunden ist, und nur intern zugängliche Dienste ausführen.
Weitere Informationen finden Sie unter Konfigurieren Ihrer eigenen Subnetze des virtuellen Netzwerks mit Kubenet oder mit Azure CNI.
Wenn Sie einen internen Lastenausgleich in einem AKS-Cluster bereitstellen möchten, der ein privates Netzwerk verwendet, müssen keine Änderungen an den vorherigen Schritten vorgenommen werden. Das Lastenausgleichsmodul wird in der Knotenressourcengruppe für Ihren AKS-Cluster erstellt und mit Ihrem privaten virtuellen Netzwerk und Subnetz verbunden, wie im folgenden Beispiel gezeigt:
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
Hinweis
Die vom AKS-Cluster verwendete Clusteridentität muss mindestens die Rolle Netzwerkmitwirkender in Ihrer virtuellen Netzwerk-Ressource haben. Sie können die Clusteridentität mithilfe des az aks show-Befehls anzeigen, z. B. az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity". Sie können die Rolle „Netzwerkmitwirkender“ mithilfe des az role assignment create-Befehls zuweisen, z. B. az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor".
Wenn Sie stattdessen eine benutzerdefinierte Rolle definieren möchten, benötigen Sie die folgenden Berechtigungen:
Microsoft.Network/virtualNetworks/subnets/join/actionMicrosoft.Network/virtualNetworks/subnets/read
Weitere Informationen finden Sie unter Hinzufügen, Ändern oder Löschen eines Subnetzes virtueller Netzwerke.
Angeben eines anderen Subnetzes
Fügen Sie Ihrem Dienst die Annotation azure-load-balancer-internal-subnet hinzu, um ein Subnetz für Ihren Load Balancer anzugeben. Das angegebene Subnetz muss sich dabei im gleichen virtuellen Netzwerk wie Ihr AKS-Cluster befinden. Nach der Bereitstellung ist die Adresse EXTERNAL-IP des Lastenausgleichs Teil des angegebenen Subnetzes.
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
Legen Sie den service.beta.kubernetes.io/azure-load-balancer-internal-subnetAnnotationswert auf die Zeichenfolge des Subnetznamens fest, z. B. "apps-subnet".
Löschen des Lastenausgleichs
Das Lastenausgleichsmodul wird gelöscht, wenn Sie alle zugehörigen Kubernetes-Dienste löschen.
Wie jede andere Kubernetes-Ressource können Sie einen Dienst direkt löschen (z. B. kubectl delete service internal-app). Dadurch wird auch der zugrunde liegende Azure-Lastenausgleich gelöscht.
Nächste Schritte
Weitere Informationen zu Kubernetes-Diensten finden Sie in der Dokumentation zu Kubernetes-Diensten.