Leer en inglés

Compartir a través de


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 comando az 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

  1. 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-addonscon el parámetro --addons.

    az aks enable-addons --resource-group myResourceGroup --name myAKSCluster --addons http_application_routing
    
  2. 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 comando az 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
  1. 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
    
  2. 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
    
  3. 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

  1. 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
    
  2. 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
    
  3. 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
    
  4. Repita 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

  1. 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 DNSA y TXT 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'."
    
  2. 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).