Add-On für HTTP-Anwendungsrouting für Azure Kubernetes Service (AKS) (eingestellt)

Achtung

Das Add-On für HTTP-Anwendungsrouting (Vorschau) für Azure Kubernetes Service (AKS) wird am 3. März 2025 eingestellt. Es wird empfohlen, bis zu diesem Datum zum Anwendungsrouting-Add-On zu migrieren.

Das Routing-Add-On für HTTP-Anwendungen ermöglicht einen einfachen Zugriff auf Anwendungen, die in Ihrem AKS-Cluster (Azure Kubernetes Service) bereitgestellt sind, durch:

  • Konfigurieren eines Eingangsdatencontrollers in Ihrem AKS-Cluster.
  • Erstellen öffentlich zugänglicher DNS-Namen für Anwendungsendpunkte.
  • Erstellen einer DNS-Zone in Ihrem Abonnement. Weitere Informationen zu den DNS-Kosten finden Sie unter Azure DNS – Preise.

Vorbereitung

  • Das Routing-Add-On für HTTP-Anwendungen funktioniert derzeit nicht mit AKS-Versionen 1.22.6 und höher.
  • Wenn Sie Befehle lokal ausführen, installieren Sie kubectl mit dem Befehl „az aks install-cli“.

Übersicht über das Routing-Add-On für HTTP-Anwendungen

Das Add-On stellt zwei Komponenten bereit: einen Kubernetes-Eingangsdatencontroller und einen externen DNS-Controller.

  • Eingangsdatencontroller: Der Eingangsdatencontroller ist über einen Kubernetes-Dienst vom Typ „LoadBalancer“ online verfügbar. Er überwacht und implementiert Kubernetes-Eingangsressourcen und erstellt Routen zu Anwendungsendpunkten.
  • Externer DNS-Controller: Der externe DNS-Controller überwacht die Kubernetes-Eingangsressourcen und erstellt in der clusterspezifischen DNS-Zone DNS-A-Einträge.

HTTP-Anwendungsrouting aktivieren

  1. Erstellen Sie einen neuen AKS-Cluster, und aktivieren Sie das Routing-Add-On für HTTP-Anwendungen mit dem Befehl „az aks create“ mit dem Parameter „--enable-addons“.

    az aks create --resource-group myResourceGroup --name myAKSCluster --enable-addons http_application_routing
    

    Sie können auch HTTP-Routing für einen vorhandenen AKS-Cluster mit dem Befehl des Befehls „az aks enable-addons“ mit dem Parameter „--addons“.

    az aks enable-addons --resource-group myResourceGroup --name myAKSCluster --addons http_application_routing
    
  2. Rufen Sie den DNS-Zonennamen mit dem Befehl „az aks show“ ab. Sie benötigen den DNS-Zonennamen, um Anwendungen im Cluster bereitzustellen.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName -o table
    

    Die Ausgabe sollte wie die folgende Beispielausgabe aussehen:

    9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io
    

Herstellen einer Verbindung mit dem AKS-Cluster

  • Mit dem Befehl az aks get-credentials können Sie kubectl für die Verbindungsherstellung mit Ihrem Kubernetes-Cluster konfigurieren. Im folgenden Beispiel werden Anmeldeinformationen für den AKS-Cluster namens myAKSCluster in myResourceGroup abgerufen:

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

Verwenden des HTTP-Anwendungsroutings

Wichtig

Das Routing-Add-On für HTTP-Anwendungen kann nur für Eingangsressourcen mit der folgenden Anmerkung ausgelöst werden:

annotations:
 kubernetes.io/ingress.class: addon-http-application-routing
  1. Erstellen Sie eine Datei namens samples-http-application-routing.yaml, und kopieren Sie den folgenden YAML-Code. Aktualisieren Sie in Zeile 43 <CLUSTER_SPECIFIC_DNS_ZONE> mit dem im vorherigen Schritt erfassten DNS-Zonennamen.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aks-helloworld
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: aks-helloworld
      template:
        metadata:
          labels:
            app: aks-helloworld
        spec:
          containers:
          - name: aks-helloworld
            image: mcr.microsoft.com/azuredocs/aks-helloworld:v1
            ports:
            - containerPort: 80
            env:
            - name: TITLE
              value: "Welcome to Azure Kubernetes Service (AKS)"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: aks-helloworld
    spec:
      type: ClusterIP
      ports:
     - port: 80
      selector:
        app: aks-helloworld
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: aks-helloworld
      annotations:
        kubernetes.io/ingress.class: addon-http-application-routing
    spec:
      rules:
     - host: aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE>
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
    
  2. Erstellen Sie die Ressourcen mit dem Befehl „kubectl apply“.

    kubectl apply -f samples-http-application-routing.yaml
    

    Die erstellten Ressourcen werden im folgenden Beispiel veranschaulicht:

    deployment.apps/aks-helloworld created
    service/aks-helloworld created
    ingress.networking.k8s.io/aks-helloworld created
    
  3. Öffnen Sie einen Webbrowser mit aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE>, z. B. aks-helloworld.9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io, und überprüfen Sie, ob Sie die Demoanwendung sehen. Es kann einige Minuten dauern, bis die Anwendung angezeigt wird.

HTTP-Anwendungsrouting entfernen

  1. Entfernen Sie das Routing-Add-On für HTTP-Anwendungen mithilfe des [az aks disable-addons][az-aks-disable-addons] command with the addons'-Parameters.

    az aks disable-addons --addons http_application_routing --name myAKSCluster --resource-group myResourceGroup --no-wait
    
  2. Wenn das Routing-Add-On für HTTP-Anwendungen deaktiviert ist, verbleiben eventuell einige Kubernetes-Ressourcen im Cluster. Zu diesen Ressourcen zählen configmaps und secrets, die im Namespace kube-system erstellt werden. Wenn Sie stets einen sauberen Cluster haben möchten, empfiehlt es sich, diese Ressourcen zu entfernen. Suchen Sie mit den folgenden kubectl get-Befehlen nach Ressourcen des Typs addon-http-application-routing:

    kubectl get deployments --namespace kube-system
    kubectl get services --namespace kube-system
    kubectl get configmaps --namespace kube-system
    kubectl get secrets --namespace kube-system
    

    Die folgende Beispielausgabe zeigt configmaps, die gelöscht werden sollten:

    NAMESPACE     NAME                                                       DATA   AGE
    kube-system   addon-http-application-routing-nginx-configuration         0      9m7s
    kube-system   addon-http-application-routing-tcp-services                0      9m7s
    kube-system   addon-http-application-routing-udp-services                0      9m7s
    
  3. Löschen Sie die verbleibenden Ressourcen mit de Befehl „kubectl delete“. Stellen Sie sicher, dass Sie den Ressourcentyp, den Ressourcennamen und den Namespace angeben. Das folgende Beispiel löscht eine der vorherigen configMaps:

    kubectl delete configmaps addon-http-application-routing-nginx-configuration --namespace kube-system
    
  4. Wiederholen Sie den vorherigen kubectl delete-Schritt für alle Ressourcen des Typs addon-http-application-routing, die sich noch in Ihrem Cluster befinden.

Problembehandlung

  1. Zeigen Sie die Anwendungsprotokolle für die externe DNS-Anwendung mit dem Befehl „kubectl logs“ an.

    kubectl logs -f deploy/addon-http-application-routing-external-dns -n kube-system
    

    Die Protokolle sollten bestätigen, dass die DNS-Einträge A und TXT erfolgreich erstellt wurden, wie in der folgenden Beispielausgabe gezeigt:

    time="2018-04-26T20:36:19Z" level=info msg="Updating A record named 'aks-helloworld' to '52.242.28.189' for Azure DNS zone '471756a6-e744-4aa0-aa01-89c4d162a7a7.canadaeast.aksapp.io'."
    time="2018-04-26T20:36:21Z" level=info msg="Updating TXT record named 'aks-helloworld' to '"heritage=external-dns,external-dns/owner=default"' for Azure DNS zone '471756a6-e744-4aa0-aa01-89c4d162a7a7.canadaeast.aksapp.io'."
    
  2. Zeigen Sie die Anwendungsprotokolle für den NGINX-Eingangsdatencontroller mit dem Befehl „kubectl logs“ an.

    kubectl logs -f deploy/addon-http-application-routing-nginx-ingress-controller -n kube-system
    

    Die Protokolle sollten „CREATE“ einer Eingangsressource und das erneute Laden des Controllers bestätigen, wie in der folgenden Beispielausgabe gezeigt:

    -------------------------------------------------------------------------------
    NGINX Ingress controller
      Release:    0.13.0
      Build:      git-4bc943a
      Repository: https://github.com/kubernetes/ingress-nginx
    -------------------------------------------------------------------------------
    
    I0426 20:30:12.212936       9 flags.go:162] Watching for ingress class: addon-http-application-routing
    W0426 20:30:12.213041       9 flags.go:165] only Ingress with class "addon-http-application-routing" will be processed by this ingress controller
    W0426 20:30:12.213505       9 client_config.go:533] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
    I0426 20:30:12.213752       9 main.go:181] Creating API client for https://10.0.0.1:443
    I0426 20:30:12.287928       9 main.go:225] Running in Kubernetes Cluster version v1.8 (v1.8.11) - git (clean) commit 1df6a8381669a6c753f79cb31ca2e3d57ee7c8a3 - platform linux/amd64
    I0426 20:30:12.290988       9 main.go:84] validated kube-system/addon-http-application-routing-default-http-backend as the default backend
    I0426 20:30:12.294314       9 main.go:105] service kube-system/addon-http-application-routing-nginx-ingress validated as source of Ingress status
    I0426 20:30:12.426443       9 stat_collector.go:77] starting new nginx stats collector for Ingress controller running in namespace  (class addon-http-application-routing)
    I0426 20:30:12.426509       9 stat_collector.go:78] collector extracting information from port 18080
    I0426 20:30:12.448779       9 nginx.go:281] starting Ingress controller
    I0426 20:30:12.463585       9 event.go:218] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"kube-system", Name:"addon-http-application-routing-nginx-configuration", UID:"2588536c-4990-11e8-a5e1-0a58ac1f0ef2", APIVersion:"v1", ResourceVersion:"559", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap kube-system/addon-http-application-routing-nginx-configuration
    I0426 20:30:12.466945       9 event.go:218] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"kube-system", Name:"addon-http-application-routing-tcp-services", UID:"258ca065-4990-11e8-a5e1-0a58ac1f0ef2", APIVersion:"v1", ResourceVersion:"561", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap kube-system/addon-http-application-routing-tcp-services
    I0426 20:30:12.467053       9 event.go:218] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"kube-system", Name:"addon-http-application-routing-udp-services", UID:"259023bc-4990-11e8-a5e1-0a58ac1f0ef2", APIVersion:"v1", ResourceVersion:"562", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap kube-system/addon-http-application-routing-udp-services
    I0426 20:30:13.649195       9 nginx.go:302] starting NGINX process...
    I0426 20:30:13.649347       9 leaderelection.go:175] attempting to acquire leader lease  kube-system/ingress-controller-leader-addon-http-application-routing...
    I0426 20:30:13.649776       9 controller.go:170] backend reload required
    I0426 20:30:13.649800       9 stat_collector.go:34] changing prometheus collector from  to default
    I0426 20:30:13.662191       9 leaderelection.go:184] successfully acquired lease kube-system/ingress-controller-leader-addon-http-application-routing
    I0426 20:30:13.662292       9 status.go:196] new leader elected: addon-http-application-routing-nginx-ingress-controller-5cxntd6
    I0426 20:30:13.763362       9 controller.go:179] ingress backend successfully reloaded...
    I0426 21:51:55.249327       9 event.go:218] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"default", Name:"aks-helloworld", UID:"092c9599-499c-11e8-a5e1-0a58ac1f0ef2", APIVersion:"extensions", ResourceVersion:"7346", FieldPath:""}): type: 'Normal' reason: 'CREATE' Ingress default/aks-helloworld
    W0426 21:51:57.908771       9 controller.go:775] service default/aks-helloworld does not have any active endpoints
    I0426 21:51:57.908951       9 controller.go:170] backend reload required
    I0426 21:51:58.042932       9 controller.go:179] ingress backend successfully reloaded...
    167.220.24.46 - [167.220.24.46] - - [26/Apr/2018:21:53:20 +0000] "GET / HTTP/1.1" 200 234 "" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" 197 0.001 [default-aks-helloworld-80] 10.244.0.13:8080 234 0.004 200
    

Bereinigen von Ressourcen

  • Entfernen Sie die zugeordneten Kubernetes-Objekte, die in diesem Artikel erstellt wurden, mit dem Befehl „kubectl delete“.

    kubectl delete -f samples-http-application-routing.yaml
    

    Die folgende Beispielausgabe zeigt, dass Kubernetes-Objekte entfernt wurden:

    deployment "aks-helloworld" deleted
    service "aks-helloworld" deleted
    ingress "aks-helloworld" deleted
    

Nächste Schritte

Informationen zur Installation eines HTTPS-gesicherten Eingangscontrollers in AKS finden Sie unter Eingehender HTTPS-Datenverkehr in Azure Kubernetes Service (AKS).