Compartir a través de


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

Este artículo ayuda a ilustrar el uso de los recursos de entrada de Kubernetes para exponer un servicio de Azure Kubernetes Service (AKS) de ejemplo mediante Azure Application Gateway a través de HTTP o HTTPS.

Sugerencia

Considere Puerta de enlace de aplicaciones para contenedores para la solución de entrada de Kubernetes.

Requisitos previos

  • Un gráfico de Helm ingress-azure instalado:
    • 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 (AGIC) en el clúster de AKS.
    • Implementación de Brownfield: si tiene un clúster de AKS existente y una implementación de Application Gateway, consulte estas instrucciones para instalar AGIC en el clúster de AKS.
  • Un certificado x509 y su clave privada, si desea usar HTTPS en esta aplicación.

Implementación de la aplicación de libro de invitados

La aplicación guestbook 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.

Para implementar la aplicación guestbook:

  1. Descargue guestbook-all-in-one.yaml de esta página de GitHub.

  2. Implemente guestbook-all-in-one.yaml en el clúster de AKS mediante la ejecución de este comando:

    kubectl apply -f guestbook-all-in-one.yaml
    

Exponer servicios a través de HTTP

Para exponer la aplicación guestbook, 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 implementación de Application Gateway.

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

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

    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 implementación de Application Gateway.

Exponer servicios a través de HTTPS

Sin un nombre de host especificado

Si no especifica un nombre de host, el servicio guestbook está disponible en todos los nombres de host que apuntan a la implementación de Application Gateway.

  1. Antes de implementar el recurso de entrada, cree un secreto de Kubernetes para hospedar el certificado y la clave privada:

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

    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
    
  3. Almacene el recurso de entrada en un archivo denominado ing-guestbook-tls.yaml.

  4. Implemente ing-guestbook-tls.yaml mediante la ejecución de este comando:

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

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

Con un nombre de host especificado

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

  1. Defina el siguiente recurso de entrada. En la sección secretName, reemplace <guestbook-secret-name> por el nombre del secreto. En las secciones hosts y host, reemplace <guestbook.contoso.com> por el nombre de host.

    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 este comando:

    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.

Integración con otros servicios

Use el siguiente recurso de entrada para agregar rutas de acceso 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