Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
kubectlcon 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
LoadBalancerde 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
Ade 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 createcon el parámetro--enable-addons.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --enable-addons http_application_routing \ --generate-ssh-keysTambién puede habilitar el enrutamiento de HTTP en un clúster de AKS existente mediante el comando
az aks enable-addonscon el parámetro--addons.az aks enable-addons --resource-group myResourceGroup --name myAKSCluster --addons http_application_routingRecupere 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 tableLa 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
kubectlpara 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: 80Cree los recursos mediante el comando
kubectl apply.kubectl apply -f samples-http-application-routing.yamlEn el siguiente ejemplo se muestran los recursos creados:
deployment.apps/aks-helloworld created service/aks-helloworld created ingress.networking.k8s.io/aks-helloworld createdAbra 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 theaddons".az aks disable-addons --addons http_application_routing --name myAKSCluster --resource-group myResourceGroup --no-waitCuando 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-systemLa 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 9m7sElimine 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-systemRepita el paso anterior
kubectl deletepara 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-systemLos registros deben confirmar que un registro DNS
AyTXTse 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-systemLos registros deben confirmar el
CREATEde 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.yamlEn 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).