Componente aggiuntivo di routing delle applicazioni HTTP per servizio Azure Kubernetes (servizio Azure Kubernetes) (ritirato)

Attenzione

Il componente aggiuntivo di routing delle applicazioni HTTP (anteprima) per servizio Azure Kubernetes (servizio Azure Kubernetes) verrà ritirato il 03 marzo 2025. È consigliabile eseguire la migrazione al componente aggiuntivo Routing applicazioni entro tale data.

Il componente aggiuntivo di routing delle applicazioni HTTP semplifica l'accesso alle applicazioni distribuite nel cluster servizio Azure Kubernetes (AKS) tramite:

  • Configurazione di un controller di ingresso nel cluster del servizio Azure Kubernetes.
  • Creazione di nomi DNS accessibili pubblicamente per gli endpoint dell'applicazione
  • Creazione di una zona DNS nella sottoscrizione. Per altre informazioni sul costo del DNS, vedere la pagina relativa ai prezzi del DNS.

Prima di iniziare

  • Il componente aggiuntivo per il routing delle applicazioni HTTP non funziona con le versioni del servizio Azure Kubernetes 1.22.6+.
  • Se si eseguono comandi in locale, installare kubectl usando il az aks install-cli comando .

Panoramica del componente aggiuntivo per il routing delle applicazioni HTTP

Il componente aggiuntivo distribuisce due componenti: un controller di ingresso Kubernetes e un controller EXTERNAL-DNS .

  • Controller di ingresso: il controller di ingresso viene esposto a Internet usando un servizio Kubernetes LoadBalancer . Il controller di ingresso controlla e implementa le risorse di ingresso kubernetes e crea route agli endpoint dell'applicazione.
  • Controller EXTERNAL-DNS: il controller EXTERNAL-DNS controlla le risorse di ingresso kubernetes e crea record DNS nella zona DNS A specifica del cluster.

Abilitare il routing delle applicazioni HTTP

  1. Creare un nuovo cluster del servizio Azure Kubernetes e abilitare il componente aggiuntivo di routing dell'applicazione HTTP usando il az aks create comando con il --enable-addons parametro .

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

    È anche possibile abilitare il routing HTTP in un cluster del servizio Azure Kubernetes esistente usando il az aks enable-addons comando con il --addons parametro .

    az aks enable-addons --resource-group myResourceGroup --name myAKSCluster --addons http_application_routing
    
  2. Recuperare il nome della zona DNS usando il az aks show comando . È necessario il nome della zona DNS per distribuire le applicazioni nel cluster.

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

    L'output dovrebbe essere simile all'output di esempio seguente:

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

Connettersi al cluster del servizio Azure Kubernetes

  • Configurare kubectl per connettersi al cluster Kubernetes usando il az aks get-credentials comando . L'esempio seguente ottiene le credenziali per il cluster AKS denominato myAKSCluster in myResourceGroup:

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

Usare il routing di applicazioni HTTP

Importante

Il componente aggiuntivo di routing dell'applicazione HTTP può essere attivato solo nelle risorse in ingresso con l'annotazione seguente:

annotations:
 kubernetes.io/ingress.class: addon-http-application-routing
  1. Creare un file denominato samples-http-application-routing.yaml e copiarlo nel codice YAML seguente. Nella riga 43 aggiornare <CLUSTER_SPECIFIC_DNS_ZONE> con il nome della zona DNS raccolto nel passaggio precedente.

    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. Creare le risorse usando il kubectl apply comando .

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

    L'esempio seguente mostra le risorse create:

    deployment.apps/aks-helloworld created
    service/aks-helloworld created
    ingress.networking.k8s.io/aks-helloworld created
    
  3. Aprire un Web browser per il servizio Azure Kubernetes-helloworld.<>CLUSTER_SPECIFIC_DNS_ZONE, ad esempio aks-helloworld.9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io e verificare che venga visualizzata l'applicazione demo. La visualizzazione dell'applicazione può richiedere alcuni minuti.

Rimuovere il routing dell'applicazione HTTP

  1. Rimuovere il componente aggiuntivo di routing dell'applicazione HTTP usando il parametro [az aks disable-addons][az-aks-disable-addons] command with the addons'.

    az aks disable-addons --addons http_application_routing --name myAKSCluster --resource-group myResourceGroup --no-wait
    
  2. Quando il componente aggiuntivo di routing dell'applicazione HTTP è disabilitato, alcune risorse Kubernetes possono rimanere nel cluster. Queste risorse includono configmap e segreti e vengono creati nello spazio dei nomi kube-system . Per mantenere un cluster pulito, è possibile rimuovere queste risorse. Cercare addon-http-application-routing resources usando i comandi seguenti kubectl get :

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

    L'output di esempio seguente mostra le mappe di configurazione che devono essere eliminate:

    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. Eliminare le risorse rimanenti usando il kubectl delete comando . Assicurarsi di specificare il tipo di risorsa, il nome della risorsa e lo spazio dei nomi. Nell'esempio seguente viene eliminata una delle risorse configmaps precedente:

    kubectl delete configmaps addon-http-application-routing-nginx-configuration --namespace kube-system
    
  4. Ripetere il passaggio precedente kubectl delete per tutte le risorse addon-http-application-routing rimanenti nel cluster.

Risolvere problemi

  1. Visualizzare i log dell'applicazione per l'applicazione External-DNS usando il kubectl logs comando .

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

    I log devono verificare che un A record DNS e TXT siano stati creati correttamente, come illustrato nell'output di esempio seguente:

    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. Visualizzare i log dell'applicazione per il controller di ingresso NGINX usando il kubectl logs comando .

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

    I log devono confermare l'oggetto CREATE di una risorsa in ingresso e il ricaricamento del controller, come illustrato nell'output di esempio seguente:

    -------------------------------------------------------------------------------
    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
    

Pulire le risorse

  • Rimuovere gli oggetti Kubernetes associati creati in questo articolo usando il kubectl delete comando .

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

    L'output di esempio seguente mostra che gli oggetti Kubernetes sono stati rimossi:

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

Passaggi successivi

Per informazioni su come installare un controller di ingresso protetto da HTTPS nel servizio Azure Kubernetes, vedere Ingresso HTTPS in servizio Azure Kubernetes (servizio Azure Kubernetes).