Componente aggiuntivo Instradamento dell’applicazione HTTP per il servizio Azure Kubernetes (ritirato)
Attenzione
Il componente aggiuntivo Instradamento dell’applicazione HTTP (anteprima) per il servizio Azure Kubernetes verrà ritirato il 3 marzo 2025. È consigliabile eseguire la migrazione al componente aggiuntivo Instradamento dell'applicazione entro tale data.
La soluzione Instradamento dell’applicazione HTTP semplifica l'accesso alle applicazioni distribuite nel cluster del servizio Azure Kubernetes nei seguenti modi:
- Configurando un controller in ingresso nel cluster del servizio Azure Kubernetes
- Creando nomi DNS accessibili pubblicamente per gli endpoint applicazione
- Creando una zona DNS nella sottoscrizione Per altre informazioni sul costo del DNS, vedere la pagina relativa ai prezzi del DNS.
Operazioni preliminari
- Il componente aggiuntivo Instradamento dell’applicazione HTTP non funziona con le versioni del servizio Azure Kubernetes successive alla 1.22.6.
- Se si eseguono comandi in locale, installare
kubectl
usando il comandoaz aks install-cli
.
Panoramica del componente aggiuntivo Instradamento dell’applicazione HTTP
Il componente aggiuntivo distribuisce due componenti: un controller in ingresso Kubernetes e un controllerExternal-DNS.
- Controller in ingresso: il controller in ingresso è esposto a Internet mediante un servizio
LoadBalancer
Kubernetes. Controlla e implementa le risorse in ingresso Kubernetes, creando route agli endpoint applicazione. - Controller External-DNS: questo controller controlla le risorse in ingresso Kubernetes e crea record
A
DNS nella zona DNS specifica del cluster.
Abilitare Instradamento dell’applicazione HTTP
Creare un nuovo cluster del servizio Azure Kubernetes e abilitare il componente aggiuntivo Instradamento dell’applicazione HTTP usando il comando
az aks create
con il parametro--enable-addons
.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --enable-addons http_application_routing \ --generate-ssh-keys
È anche possibile abilitare l’instradamento HTTP in un cluster del servizio Azure Kubernetes esistente usando il comando
az aks enable-addons
con il parametro--addons
.az aks enable-addons --resource-group myResourceGroup --name myAKSCluster --addons http_application_routing
Ottenere il nome della zona DNS usando il comando
az aks show
. Il nome della zona DNS è necessario per distribuire le applicazioni nel cluster.az aks show --resource-group myResourceGroup --name myAKSCluster --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName -o table
L'output deve essere simile a quello riportato nell'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 comandoaz aks get-credentials
. 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 Instradamento dell'applicazione HTTP può essere attivato solo per le 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. Alla riga 43 aggiornare
<CLUSTER_SPECIFIC_DNS_ZONE>
con il nome della zona DNS ottenuto 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 comando
kubectl apply
.kubectl apply -f samples-http-application-routing.yaml
L'output di esempio seguente mostra le risorse create:
deployment.apps/aks-helloworld created service/aks-helloworld created ingress.networking.k8s.io/aks-helloworld created
Aprire aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE> in un Web browser, ad esempio aks-helloworld.9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io e verificare che venga visualizzata l’applicazione demo. La visualizzazione dell'applicazione potrebbe richiedere alcuni minuti.
Usare Instradamento dell’applicazione HTTP
Rimuovere il componente aggiuntivo Instradamento 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 configmaps e secrets e vengono create nello spazio dei nomi kube-system. Per mantenere un cluster pulito, è possibile rimuovere queste risorse. Cercare le risorse addon-http-application-routing con i comandi
kubectl get
seguenti: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 risorse configmaps 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 comando
kubectl delete
. 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
kubectl delete
precedente per tutte le risorse addon-http-application-routing rimanenti nel cluster.
Risoluzione dei problemi
Visualizzare i registri applicazioni per l'applicazione External-DNS usando il comando
kubectl logs
.kubectl logs -f deploy/addon-http-application-routing-external-dns -n kube-system
I registri devono confermare che sono stati creati correttamente un record DNS
A
eTXT
, 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 registri applicazioni per il controller in ingresso NGINX usando il comando
kubectl logs
.kubectl logs -f deploy/addon-http-application-routing-nginx-ingress-controller -n kube-system
I registri devono confermare l'operazione
CREATE
per 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 comando
kubectl delete
.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 in ingresso protetto con HTTPS nel servizio Azure Kubernetes, vedere Ingresso HTTPS nel servizio Azure Kubernetes.