Complemento de enrutamiento de aplicación HTTP para Azure Kubernetes Service (AKS) (retirado)
Precaución
El complemento de enrutamiento de aplicaciones HTTP (versión preliminar) para Azure Kubernetes Service (AKS) se retirará el 03 de marzo de 2025. Le recomendamos que migre al complemento de enrutamiento de aplicaciones web antes de esa fecha.
La solución de enrutamiento de aplicación HTTP facilita el acceso a las aplicaciones implementadas en el clúster de Azure Kubernetes Service (AKS) mediante:
- Configuración de un controlador de entrada en el clúster de AKS.
- Creación de nombres DNS accesibles públicamente para puntos de conexión de la aplicación
- Creación de una zona DNS en la suscripción. Para más información sobre el costo de DNS, consulte los precios de DNS.
Antes de empezar
- El enrutamiento de aplicaciones HTTP no funciona con las versiones 1.22.6 y posteriores de AKS.
- Si ejecuta comandos localmente, instale
kubectl
con el comandoaz aks install-cli
.
Introducción al complemento de enrutamiento de aplicaciones HTTP
El complemento implementa dos componentes: un controlador de entrada de Kubernetes y un controlador DNS externo.
- Controlador de entrada: el controlador de entrada está expuesto a Internet a través de un servicio
LoadBalancer
de Kubernetes. El controlador de entrada supervisa e implementa recursos de entrada de Kubernetes y crea rutas a los puntos de conexión de la aplicación. - Controlador DNS externo: el controlador DNS externo inspecciona los recursos de entrada de Kubernetes y crea registros
A
de DNS en la zona DNS específica del clúster.
Habilitación del enrutamiento de aplicación HTTP
Cree un nuevo clúster de AKS y habilite el complemento de enrutamiento de aplicaciones HTTP mediante el comando
az aks create
con el parámetro--enable-addons
.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --enable-addons http_application_routing \ --generate-ssh-keys
También puede habilitar el enrutamiento de HTTP en un clúster de AKS existente mediante el comando
az aks enable-addons
con el parámetro--addons
.az aks enable-addons --resource-group myResourceGroup --name myAKSCluster --addons http_application_routing
Recupere el nombre de la zona DNS mediante el comando
az aks show
. Necesita el nombre de la zona DNS para implementar aplicaciones en el clúster.az aks show --resource-group myResourceGroup --name myAKSCluster --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName -o table
La salida debe tener un aspecto similar al ejemplo de salida siguiente:
9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io
Conectarse al clúster AKS
Para configurar
kubectl
para conectarse a su clúster de Kubernetes, use el comandoaz aks get-credentials
. En el ejemplo siguiente se obtienen las credenciales del clúster de AKS llamado myAKSCluster en el grupo de recursos myResourceGroup:az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Uso del enrutamiento de aplicación HTTP
Importante
El complemento de enrutamiento de aplicaciones HTTP solo se puede desencadenar en los recursos de entrada con la anotación siguiente:
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
Cree un archivo denominado samples-http-application-routing.yaml y cópielo en el siguiente código YAML. En la línea 43, actualice
<CLUSTER_SPECIFIC_DNS_ZONE>
con el nombre de la zona DNS que se recopiló en el paso anterior.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
Cree los recursos mediante el comando
kubectl apply
.kubectl apply -f samples-http-application-routing.yaml
En el siguiente ejemplo se muestran los recursos creados:
deployment.apps/aks-helloworld created service/aks-helloworld created ingress.networking.k8s.io/aks-helloworld created
Abra un explorador web a aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE>, por ejemplo aks-helloworld.9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io y compruebe que puede ver la aplicación demo. La aplicación puede tardar unos minutos en aparecer.
Quitar el enrutamiento de aplicación HTTP
Quite el complemento de enrutamiento de aplicaciones HTTP mediante el parámetro [
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
Cuando se deshabilita el complemento de enrutamiento de aplicación HTTP, algunos recursos de Kubernetes pueden permanecer en el clúster. Estos recursos incluyen a los archivos configMaps y a los secretos y se crean en el espacio de nombres kube-system. Para mantener un clúster limpio, es posible que quiera quitar estos recursos. Busque los recursos addon-http-application-routing con los siguientes comandos
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
La salida del ejemplo siguiente muestra los archivos configmaps que deben eliminarse:
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
Elimine los recursos restantes mediante el comando
kubectl delete
. Asegúrese de especificar el tipo de recurso, el nombre del recurso y el espacio de nombres. En el ejemplo siguiente se elimina uno de los archivos configmaps anteriores:kubectl delete configmaps addon-http-application-routing-nginx-configuration --namespace kube-system
Repita el paso anterior
kubectl delete
para todos los recursos addon-http-application-routing que aún se encuentran en el clúster.
Solución de problemas
Vea los registros de aplicaciones de la aplicación External-DNS mediante el comando
kubectl logs
.kubectl logs -f deploy/addon-http-application-routing-external-dns -n kube-system
Los registros deben confirmar que un registro DNS
A
yTXT
se crearon correctamente, como se muestra en la salida del ejemplo siguiente: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'."
Vea los registros de aplicaciones para el controlador de entrada NGINX mediante el comando
kubectl logs
.kubectl logs -f deploy/addon-http-application-routing-nginx-ingress-controller -n kube-system
Los registros deben confirmar el
CREATE
de un recurso de entrada y la recarga del controlador, como se muestra en la salida del ejemplo siguiente:------------------------------------------------------------------------------- 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
Limpieza de recursos
Quite los objetos Kubernetes asociados creados en este artículo mediante el comando
kubectl delete
.kubectl delete -f samples-http-application-routing.yaml
En la siguiente salida del ejemplo se muestra que los objetos Kubernetes se han quitado:
deployment "aks-helloworld" deleted service "aks-helloworld" deleted ingress "aks-helloworld" deleted
Pasos siguientes
Para más información sobre cómo instalar un controlador de entrada protegido con HTTPS en AKS, consulteEntrada HTTPS en Azure Kubernetes Service (AKS).