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 commandeaz 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
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
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 commandeaz 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
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
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
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
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
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
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
Répétez l’étape
kubectl delete
précédente pour toutes les ressources addon-http-application-routing restant dans votre cluster.
Dépanner
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
etTXT
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'."
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).