Verwenden Sie eine statische öffentliche IP-Adresse und eine DNS-Bezeichnung für den Load Balancer des Azure Kubernetes Service (AKS)

Wenn Sie eine Lastenausgleichsressource in einem Azure Kubernetes Service (AKS)-Cluster erstellen, ist die ihr zugewiesene öffentliche IP-Adresse nur für die Lebensdauer dieser Ressource gültig. Wenn Sie den Kubernetes-Dienst löschen, werden auch der zugehörige Lastenausgleich und die zugehörige IP-Adresse gelöscht. Wenn Sie eine bestimmte IP-Adresse für einen Kubernetes-Dienst zuweisen oder beibehalten möchten, können Sie eine statische öffentliche IP-Adresse erstellen und verwenden.

In diesem Artikel wird erläutert, wie Sie eine statische öffentliche IP-Adresse erstellen und Ihrem Kubernetes-Dienst zuweisen.

Bevor Sie beginnen

  • Azure CLI-Version 2.0.59 oder höher muss installiert und konfiguriert sein. Führen Sie az --version aus, um die Version zu ermitteln. Informationen zum Installieren oder Aktualisieren finden Sie unter Install Azure CLI.
  • In diesem Artikel wird die Verwendung einer IP-Adresse der SKU Standard mit einem Load Balancer der SKU Standard behandelt. Weitere Informationen finden Sie unter IP-Adresstypen und Zuordnungsmethoden in Azure.

Erstellen eines AKS-Clusters

  1. Erstellen Sie mithilfe des Befehls az group create eine Azure-Ressourcengruppe.

    az group create --name myNetworkResourceGroup --location eastus
    
  2. Erstellen Sie einen AKS-Cluster mithilfe des az aks create Befehls.

    az aks create --name myAKSCluster --resource-group myNetworkResourceGroup --generate-ssh-keys
    

Erstellen einer statischen IP-Adresse

  1. Rufen Sie den Namen der Knotenressourcengruppe mithilfe des Befehls az aks show ab und fragen Sie die Eigenschaft nodeResourceGroup ab.

    az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv
    
  2. Erstellen Sie mithilfe des az network public-ip create Befehls eine statische öffentliche IP-Adresse in der Knotenressourcengruppe.

    az network public-ip create \
        --resource-group <node resource group name> \
        --name myAKSPublicIP \
        --sku Standard \
        --allocation-method static
    

    Wichtig

    AKS unterstützt keine Basic-Load Balancer mehr. Wenn Ihr Cluster ein Basic-Load Balancer verwendet, aktualisieren Sie auf Load Balancer Standard, bevor Sie eine statische öffentliche IP-Adresse konfigurieren.

  3. Rufen Sie die statische öffentliche IP-Adresse mithilfe des az network public-ip show Befehls ab. Geben Sie den Namen der Knotenressourcengruppe und die von Ihnen erstellte öffentliche IP-Adresse an, und fragen Sie das ipAddress ab.

    az network public-ip show --resource-group <node resource group name> --name myAKSPublicIP --query ipAddress --output tsv
    

Erstellen eines Kubernetes-Diensts mit der statischen IP-Adresse

  1. Erstellen Sie eine Datei namens load-balancer-service.yaml und kopieren Sie sie in den Inhalt der folgenden YAML-Datei. Geben Sie den öffentlichen IP-Ressourcennamen (myAKSPublicIP) an, den Sie im Abschnitt "Statische IP-Adresse erstellen " und den Namen der Knotenressourcengruppe erstellt haben.

    Die Identität der AKS-Steuerelementebene verfügt standardmäßig über Mitwirkendeberechtigungen für die Knotenressourcengruppe, sodass für die öffentliche IP, die Sie in diesem Artikel erstellen, keine weitere Rollenzuweisung erforderlich ist. Wenn Sie eine eingehende oder ausgehende öffentliche IP in einer anderen Ressourcengruppe verwenden, erteilen Sie der Steuerungsebene die erforderlichen Berechtigungen für diese Ressourcengruppe. Weitere Informationen finden Sie unter Verwaltete Identitäten in AKS.

    Wichtig

    Die Eigenschaft loadBalancerIP in einem Kubernetes-Service-Manifest ist in Anlehnung an Upstream-Kubernetes veraltet. Vorhandene Dienste funktionieren weiterhin ohne Änderung, verwenden aber stattdessen Dienstanmerkungen.

    Annotation Purpose
    service.beta.kubernetes.io/azure-pip-name Geben Sie den Namen der öffentlichen IP-Ressource an.
    service.beta.kubernetes.io/azure-load-balancer-ipv4 Geben Sie eine IPv4-Adresse an.
    service.beta.kubernetes.io/azure-load-balancer-ipv6 Geben Sie eine IPv6-Adresse an.
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name>
        service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP
      name: azure-load-balancer
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: azure-load-balancer
    

    Hinweis

    Das Hinzufügen der service.beta.kubernetes.io/azure-pip-name Anmerkung gewährleistet die effizienteste LoadBalancer-Erstellung und wird dringend empfohlen, um eine potenzielle Drosselung zu vermeiden.

  2. Legen Sie mithilfe der Dienstanmerkung eine öffentlich zugängliche DNS-Bezeichnung auf den service.beta.kubernetes.io/azure-dns-label-name Dienst fest. Damit wird ein vollqualifizierter Domänenname (Fully Qualified Domain Name, FQDN) für Ihren Dienst veröffentlicht, der die öffentlichen DNS-Server und die Domäne der obersten Ebene von Azure verwendet. Der Anmerkungswert muss innerhalb des Azure-Standorts eindeutig sein, daher wird die Verwendung einer ausreichend qualifizierten Bezeichnung empfohlen. Azure fügt dem von Ihnen angegebenen Namen automatisch ein Standardsuffix für den von Ihnen ausgewählten Standort hinzu, z. B. <location>.cloudapp.azure.com, wodurch der FQDN erstellt wird.

    Hinweis

    Informationen zum Veröffentlichen des Diensts in Ihrer eigenen Domäne finden Sie unter Azure DNS und dem Projekt external-dns.

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name>
        service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP
        service.beta.kubernetes.io/azure-dns-label-name: <unique-service-label>
      name: azure-load-balancer
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: azure-load-balancer
    
  3. Stellen Sie vor dem Erstellen des Diensts sicher, dass Ihr Cluster über eine Workload mit Pods verfügt, die die app: azure-load-balancer Bezeichnung verwenden. Das Service-Manifest wählt Pods mit diesem Label aus, erstellt aber kein Deployment.

  4. Erstellen Sie den Dienst mithilfe des kubectl apply Befehls.

    kubectl apply -f load-balancer-service.yaml
    
  5. Stellen Sie sicher, dass der Dienst mindestens einen laufenden, bereiten Pod auswählt.

    kubectl get pods -l app=azure-load-balancer
    
  6. Verwenden Sie den Befehl kubectl describe, um die DNS-Bezeichnung für Ihren Load Balancer anzuzeigen.

    kubectl describe service azure-load-balancer
    

    Das DNS-Label wird unter dem Annotations aufgeführt, wie in der folgenden gekürzten Beispielausgabe gezeigt:

    Name:                    azure-load-balancer
    Namespace:               default
    Labels:                  <none>
    Annotations:             service.beta.kubernetes.io/azure-dns-label-name: <unique-service-label>
    

Problembehandlung

In diesem Abschnitt wird vorausgesetzt, dass Sie eine statische IP-Adresse erstellt, die Schritte unter Einen Kubernetes-Dienst mit der statischen IP-Adresse erstellen ausgeführt und über einen ausgeführten AKS-Cluster verfügen. Verwenden Sie az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsvzum Abrufen des Knotenressourcengruppennamens .

Wenn die öffentliche IP-Ressource mit dem Namen in der Annotation service.beta.kubernetes.io/azure-pip-name nicht in der durch service.beta.kubernetes.io/azure-load-balancer-resource-group angegebenen Ressourcengruppe vorhanden ist oder die Identität der AKS-Kontrollebene keinen Zugriff auf diese Ressourcengruppe hat, schlägt die Erstellung des Load-Balancer-Diensts fehl. Überprüfen Sie zur Problembehandlung die Dienstanmerkungen und Erstellungsereignisse mithilfe des kubectl describe Befehls. Geben Sie den im YAML-Manifest angegebenen Namen des Diensts ein, wie im folgenden Beispiel dargestellt:

kubectl describe service azure-load-balancer

In der Ausgabe werden Informationen zur Kubernetes-Dienstressource angezeigt. Die folgende Beispielausgabe zeigt ein Warning im Events: „user supplied IP address was not found.“ Stellen Sie in diesem Szenario sicher, dass die azure-pip-name-Annotation mit dem Namen der Ressource für die statische öffentliche IP-Adresse übereinstimmt und dass die azure-load-balancer-resource-group-Annotation mit der Ressourcengruppe übereinstimmt, die sie enthält.

Name:                     azure-load-balancer
Namespace:                default
Labels:                   <none>
Annotations:              service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name>
                          service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP
Selector:                 app=azure-load-balancer
Type:                     LoadBalancer
IP:                       10.0.18.125
IP:                       40.121.183.52
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  32582/TCP
Endpoints:                <pod-ip>:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type     Reason                      Age               From                Message
  ----     ------                      ----              ----                -------
  Normal   CreatingLoadBalancer        7s (x2 over 22s)  service-controller  Creating load balancer
  Warning  CreatingLoadBalancerFailed  6s (x2 over 12s)  service-controller  Error creating load balancer (will retry): Failed to create load balancer for service default/azure-load-balancer: user supplied IP Address 40.121.183.52 was not found

Nächste Schritte

Um den Netzwerkdatenverkehr für Ihre Anwendungen besser steuern zu können, verwenden Sie das Anwendungsrouting-Add-On für AKS. Weitere Informationen zum App-Routing-Add-On finden Sie unter Verwalteter NGINX-Ingress mit dem Application Routing-Add-On.