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 ilaz 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
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
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 ilaz 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
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
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
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
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
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
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
Ripetere il passaggio precedente
kubectl delete
per tutte le risorse addon-http-application-routing rimanenti nel cluster.
Risolvere problemi
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 eTXT
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'."
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).