Exponer un servicio de AKS a través de HTTP o HTTPS mediante Application Gateway

Estos tutoriales ayudan a ilustrar el uso de los recursos de entrada de Kubernetes para exponer un servicio de Kubernetes de ejemplo mediante Azure Application Gateway a través de HTTP o HTTPS.

Requisitos previos

  • Haber instalado el gráfico de Helm ingress-azure.
    • Implementación Greenfield: si empieza desde cero, consulte estas instrucciones de instalación, en las que se describen los pasos para implementar un clúster de AKS con Application Gateway e instalar el controlador de entrada de Application Gateway en el clúster de AKS.
    • Implementación Brownfield: si ya tiene un clúster de AKS y una instancia de Application Gateway, consulte estas instrucciones para instalar el controlador de entrada de Application Gateway en el clúster de AKS.
  • Si desea usar HTTPS en esta aplicación, necesita un certificado X509 y su clave privada.

Implementación de la aplicación guestbook

La aplicación del libro de visitas es una aplicación canónica de Kubernetes que se compone de un front-end de interfaz de usuario Web, un back-end y una base de datos de Redis. De forma predeterminada, guestbook expone su aplicación a través de un servicio con el nombre frontend en el puerto 80. Sin un recurso de entrada de Kubernetes, no se puede acceder al servicio desde fuera del clúster de AKS. Usamos los recursos de entrada de la aplicación y la configuración para acceder a la aplicación mediante HTTP y HTTPS.

Utilice las instrucciones siguientes para implementar la aplicación de libro de visitas.

  1. Descargue guestbook-all-in-one.yaml de aquí
  2. Implemente guestbook-all-in-one.yaml en el clúster de AKS mediante la ejecución de
kubectl apply -f guestbook-all-in-one.yaml

Ahora, la aplicación guestbook se ha implementado.

Exponer servicios a través de HTTP

Para exponer la aplicación de libro de visitas, utilice el siguiente recurso de entrada:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: guestbook
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: frontend
          servicePort: 80

Esta entrada expone el servicio frontend de la implementación de guestbook-all-in-one como un back-end predeterminado de la instancia de Application Gateway.

Guarde el recurso de entrada anterior como ing-guestbook.yaml.

  1. Implemente ing-guestbook.yaml mediante la ejecución de:

    kubectl apply -f ing-guestbook.yaml
    
  2. Compruebe el registro del estado de implementación del controlador de entrada.

Ahora la aplicación guestbook debe estar disponible. Para comprobar la disponibilidad, visite la dirección pública de la instancia de Application Gateway.

Exponer servicios a través de HTTPS

Sin nombre de host especificado

Sin especificar el nombre de host, el servicio de libro de visitas estará disponible en todos los nombres de host que apunten a la instancia de Application Gateway.

  1. Antes de implementar la entrada, debe crear un secreto de Kubernetes para hospedar el certificado y la clave privada. Puede crear un secreto de Kubernetes mediante la ejecución de

    kubectl create secret tls <guestbook-secret-name> --key <path-to-key> --cert <path-to-cert>
    
  2. Defina la siguiente entrada. En la entrada, especifique el nombre del secreto en la sección secretName.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: guestbook
      annotations:
        kubernetes.io/ingress.class: azure/application-gateway
    spec:
      tls:
        - secretName: <guestbook-secret-name>
      rules:
      - http:
          paths:
          - backend:
              serviceName: frontend
              servicePort: 80
    

    Nota:

    Reemplace <guestbook-secret-name> en el recurso de entrada anterior por el nombre de su secreto. Almacene el recurso de entrada anterior en un archivo bajo el nombre de ing-guestbook-tls.yaml.

  3. Implemente ing-guestbook-tls.yaml mediante la ejecución de

    kubectl apply -f ing-guestbook-tls.yaml
    
  4. Compruebe el registro del estado de implementación del controlador de entrada.

Ahora, la aplicación guestbook está disponible mediante HTTP y HTTPS.

Con nombre de host especificado

También puede especificar el nombre de host en la entrada para multiplexar las configuraciones y los servicios de TLS. Al especificar el nombre de host, el servicio de libro de visitas solo está disponible en el host especificado.

  1. Defina la siguiente entrada. En la entrada, especifique el nombre del secreto en la sección secretName y reemplace el nombre de host en la sección hosts según corresponda.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: guestbook
      annotations:
        kubernetes.io/ingress.class: azure/application-gateway
    spec:
      tls:
        - hosts:
          - <guestbook.contoso.com>
          secretName: <guestbook-secret-name>
      rules:
      - host: <guestbook.contoso.com>
        http:
          paths:
          - backend:
              serviceName: frontend
              servicePort: 80
    
  2. Implemente ing-guestbook-tls-sni.yaml mediante la ejecución de

    kubectl apply -f ing-guestbook-tls-sni.yaml
    
  3. Compruebe el registro del estado de implementación del controlador de entrada.

Ahora, la aplicación guestbook está disponible mediante HTTP y HTTPS solo en el host especificado (<guestbook.contoso.com>, en este ejemplo).

Integración con otros servicios

La entrada siguiente le permite agregar otras rutas de acceso a esta entrada y redirigir esas rutas de acceso a otros servicios:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: guestbook
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - path: </other/*>
        backend:
          serviceName: <other-service>
          servicePort: 80
       - backend:
          serviceName: frontend
          servicePort: 80