Compartilhar via


Expor um serviço do AKS por HTTP ou HTTPS usando o Gateway de Aplicativo

Este artigo ajuda a ilustrar o uso de Recursos de entrada do Kubernetes para expor um Serviço de Kubernetes do Azure (AKS) de exemplo por meio do Gateway de Aplicativo do Azure via HTTP ou HTTPS.

Dica

Considere o Gateway de Aplicativos para Contêineres para sua solução de entrada do Kubernetes.

Pré-requisitos

  • Um gráfico Helm ingress-azure instalado:
    • Implantação Greenfield: se você estiver começando do zero, confira estas instruções de instalação, que descrevem as etapas para implantar um cluster do AKS com o Gateway de Aplicativo e instalar o Controlador de Entrada do Gateway de Aplicativo (AGIC) no cluster do AKS.
    • Implantação Brownfield: se você tiver uma implantação do cluster do AKS e um Gateway de Aplicativo existente, confira estas instruções para instalar o AGIC no cluster do AKS.
  • Se você quiser usar HTTPS neste aplicativo, será necessário um certificado x509 e a respectiva chave privada.

Implantar o aplicativo de página de recados

O aplicativo guestbook é um aplicativo Kubernetes canônico que consiste no front-end de uma interface do usuário da Web, um back-end e um banco de dados Redis.

Por padrão, o guestbook expõe o aplicativo por meio de um serviço com o nome frontend na porta 80. Sem um Recurso de Entrada do Kubernetes, o serviço não pode ser acessado de fora do cluster do AKS. Você usa o aplicativo e configuramos os recursos de entrada para acessar o aplicativo por meio de HTTP e HTTPS.

Para implantar o aplicativo guestbook:

  1. Baixe guestbook-all-in-one.yaml nesta página do GitHub.

  2. Implante o guestbook-all-in-one.yaml em seu cluster do AKS executando este comando:

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

Expor serviços via HTTP

Para expor o aplicativo guestbook, use o seguinte 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

Essa entrada expõe o serviço frontend da implantação guestbook-all-in-one como um back-end padrão da implantação do Gateway de Aplicativo.

Salve o recurso de entrada anterior como ing-guestbook.yaml:

  1. Implante ing-guestbook.yaml executando este comando:

    kubectl apply -f ing-guestbook.yaml
    
  2. Verifique o status da implantação no log do controlador de entrada.

Agora o aplicativo guestbook deve estar disponível. Você pode verificar a disponibilidade visitando o endereço público da implantação do Gateway de Aplicativo.

Expor serviços via HTTPS

Sem um nome de host especificado

Se você não especificar um nome de host, o serviço guestbook estará disponível em todos os nomes de host que apontam para a implantação do Gateway de Aplicativo.

  1. Antes de você implantar o recurso de entrada, criar um segredo de Kubernetes para hospedar o certificado e a chave privada:

    kubectl create secret tls <guestbook-secret-name> --key <path-to-key> --cert <path-to-cert>
    
  2. Defina a entrada o recurso de entrada a seguir. Na seção secretName, substitua <guestbook-secret-name> pelo nome do seu segredo.

    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. Armazene o recurso de entrada em um arquivo chamado ing-guestbook-tls.yaml.

  4. Implante ing-guestbook-tls.yaml executando este comando:

    kubectl apply -f ing-guestbook-tls.yaml
    
  5. Verifique o status da implantação no log do controlador de entrada.

Agora o aplicativo guestbook está disponível em HTTP e HTTPS.

Com um nome de host especificado

Você também pode especificar o nome do host no recurso de entrada para multiplexar configurações e serviços TLS. Quando você especifica um nome de host, o serviço guestbook está disponível apenas no host especificado.

  1. Defina a entrada o recurso de entrada a seguir. Na seção secretName, substitua <guestbook-secret-name> pelo nome do seu segredo. Nas seções hosts e host, substitua <guestbook.contoso.com> pelo nome do 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. Implante ing-guestbook-tls-sni.yaml executando este comando:

    kubectl apply -f ing-guestbook-tls-sni.yaml
    
  3. Verifique o status da implantação no log do controlador de entrada.

Agora o aplicativo guestbook está disponível em HTTP e HTTPS somente no host especificado.

Integrar com outros serviços

Use o seguinte recurso de entrada para adicionar caminhos e redirecionar esses caminhos para outros serviços:

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