Partage via


Module complémentaire de routage des applications HTTP pour Azure Kubernetes Service (AKS) (mis hors service)

Attention

Le module complémentaire de routage des applications HTTP (préversion) pour Azure Kubernetes Service (AKS) va être mis hors service le 3 mars 2025. Nous vous recommandons d’effectuer une migration vers le module complémentaire Routage d’applications avant cette date.

La module complémentaire de routage des applications HTTP facilite l’accès aux applications qui sont déployées sur votre cluster Azure Kubernetes Service (AKS) en vous permettant de :

  • configurer un contrôleur d’entrée dans votre cluster AKS ;
  • créer des noms DNS accessibles publiquement pour des points de terminaison d’application ;
  • créer une zone DNS dans votre abonnement. Pour plus d’informations sur les coûts DNS, consultez Tarification de DNS.

Avant de commencer

  • Le module complémentaire de routage des applications HTTP ne fonctionne pas avec les versions 1.22.6 et ultérieures d’AKS.
  • Si vous exécutez des commandes localement, installez kubectl à l’aide de la commande az aks install-cli.

Vue d’ensemble du module complémentaire de routage des applications HTTP

Le module complémentaire déploie deux composants : un contrôleur d’entrée Kubernetes et un contrôleur External-DNS.

  • Contrôleur d’entrée : le contrôleur d’entrée est exposé sur Internet à l’aide d’un service LoadBalancer Kubernetes. Le contrôleur d’entrée observe et implémente les ressources d’entrée Kubernetes et crée des routes vers des points de terminaison d’application.
  • Contrôleur External-DNS : le contrôleur External-DNS recherche des ressources d’entrée Kubernetes et crée des enregistrements A DNS dans la zone DNS propre au cluster.

Activer le routage des applications HTTP

  1. Créez un cluster AKS et activez le module complémentaire de routage des applications HTTP en utilisant la commande az aks create avec le paramètre --enable-addons.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --enable-addons http_application_routing \
        --generate-ssh-keys
    

    Vous pouvez aussi activer le routage HTTP sur un cluster AKS existant en utilisant la commande az aks enable-addons avec le paramètre --addons.

    az aks enable-addons --resource-group myResourceGroup --name myAKSCluster --addons http_application_routing
    
  2. Récupérez le nom de la zone DNS à l’aide de la commande az aks show. Vous avez besoin du nom de la zone DNS pour déployer des applications sur le cluster.

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

    Votre sortie doit ressembler à l’exemple de sortie suivant :

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

Se connecter à votre cluster AKS

  • Configurez kubectl afin de vous connecter à votre cluster Kubernetes avec la commande az aks get-credentials. L’exemple suivant obtient les informations d’identification du cluster AKS nommé myAKSCluster dans le groupe de ressources myResourceGroup :

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

Utiliser un routage d’applications HTTP

Important

Le module complémentaire de routage des applications HTTP ne peut être déclenché que sur des ressources d’entrée avec l’annotation suivante :

annotations:
 kubernetes.io/ingress.class: addon-http-application-routing
  1. Créez un fichier nommé samples-http-application-routing.yaml, puis copiez-y le code YAML suivant. À la ligne 43, mettez à jour <CLUSTER_SPECIFIC_DNS_ZONE> avec le nom de la zone DNS collecté à l’étape précédente.

    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. Créez les ressources à l’aide de la commande kubectl apply.

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

    L’exemple suivant illustre les ressources créées :

    deployment.apps/aks-helloworld created
    service/aks-helloworld created
    ingress.networking.k8s.io/aks-helloworld created
    
  3. Ouvrez un navigateur web pour aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE>, par exemple aks-helloworld.9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io, et vérifiez que l’application de démonstration s’affiche. L’application peut apparaître au bout de quelques minutes seulement.

Supprimer le routage des applications HTTP

  1. Supprimez le module complémentaire de routage des applications HTTP à l’aide du paramètre [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. Quand le module complémentaire de routage d’application HTTP est désactivé, certaines ressources Kubernetes peuvent rester dans le cluster. Ces ressources incluent les configmaps et les secrets, et sont créées dans l’espace de noms kube-system. Pour maintenir un cluster propre, vous voulez peut-être supprimer ces ressources. Recherchez les ressources addon-http-application-routing à l’aide des commandes kubectl get suivantes :

    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’exemple de sortie suivant montre les configmaps à supprimer :

    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. Supprimez les ressources restantes à l’aide de la commande kubectl delete. Veillez à spécifier le type de ressource, le nom de la ressource et l’espace de noms. L’exemple suivant supprime l’une des ressources configMaps précédentes :

    kubectl delete configmaps addon-http-application-routing-nginx-configuration --namespace kube-system
    
  4. Répétez l’étape kubectl delete précédente pour toutes les ressources addon-http-application-routing restant dans votre cluster.

Dépanner

  1. Dans les journaux des applications, recherchez l’application External-DNS à l’aide de la commande kubectl logs.

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

    Les journaux doivent confirmer que des enregistrements DNS A et TXT ont bien été créés, comme le montre l’exemple de sortie suivant :

    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. Dans les journaux des applications, recherchez le contrôleur d’entrée NGINX à l’aide de la commande kubectl logs.

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

    Les journaux doivent confirmer la création (CREATE) d’une ressource d’entrée et le rechargement du contrôleur, comme le montre l’exemple de sortie suivant :

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

Nettoyer les ressources

  • Supprimez les objets Kubernetes associés que vous avez créés dans cet article à l’aide de la commande kubectl delete.

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

    L’exemple de sortie suivant montre que les objets Kubernetes ont été supprimés :

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

Étapes suivantes

Pour savoir comment installer un contrôleur d’entrée sécurisé par HTTPS dans AKS, consultez Entrée HTTPS sur Azure Kubernetes Service (AKS).