Entrada NGINX gerenciada com o complemento de roteamento de aplicativo

Uma forma de rotear o protocolo HTTP e o tráfego HTTPS (seguro) para os aplicativos em execução em um cluster do AKS (Serviço de Kubernetes do Azure) é usar o objeto Ingress do Kubernetes. Quando você cria um objeto ingress que usa as classes de entrada NGINX de roteamento de aplicativos, o complemento cria, configura e gerencia um ou mais controladores de entrada no cluster do AKS.

Este artigo mostra como implantar e configurar um controlador de entrada básico no cluster do AKS.

Complemento de roteamento de aplicativo com recursos do NGINX

O complemento de roteamento de aplicativos com o NGINX fornece o seguinte:

Para outras configurações, confira:

Com a desativação do OSM (Open Service Mesh) da CNCF (Cloud Native Computing Foundation), o uso do complemento de roteamento de aplicativos com OSM não é recomendável.

Pré-requisitos

  • Uma assinatura do Azure. Caso não tenha uma assinatura do Azure, é possível criar uma conta gratuita.
  • CLI do Azure versão 2.54.0 ou posterior instalada e configurada. Execute az --version para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.

Limitações

  • O complemento de roteamento de aplicativos dá suporte a até cinco zonas DNS do Azure.
  • O complemento de roteamento de aplicativos só pode ser habilitado em clusters do AKS com identidade gerenciada.
  • Todas as zonas DNS globais do Azure integradas ao complemento precisam estar no mesmo grupo de recursos.
  • Todas as zonas DNS privadas do Azure integradas ao complemento precisam estar no mesmo grupo de recursos.
  • Não há suporte para a edição do ConfigMap ingress-nginx no namespace app-routing-system.
  • As anotações de snippet de código a seguir são bloqueadas e impedirão que uma entrada seja configurada: load_module, lua_package, _by_lua, location, root, proxy_pass, serviceaccount, {, }, '.

Habilitação do roteamento de aplicativos usando a CLI do Azure

Habilitação em um novo cluster

Para habilitar o roteamento de aplicativos em um novo cluster, use o comando az aks create, especificando o sinalizador --enable-app-routing.

az aks create \
    --resource-group <ResourceGroupName> \
    --name <ClusterName> \
    --location <Location> \
    --enable-app-routing \
    --generate-ssh-keys

Habilitação em um cluster existente

Para habilitar o roteamento de aplicativos em um cluster existente, use o comando az aks approuting enable.

az aks approuting enable --resource-group <ResourceGroupName> --name <ClusterName>

Conectar-se ao cluster do AKS

Para se conectar ao cluster Kubernetes no computador local, use o kubectl, o cliente de linha de comando do Kubernetes. Se você quiser instalá-lo localmente, use o comando az aks install-cli. Se você usa o Azure Cloud Shell, o kubectl já estará instalado.

Configure o kubectl para se conectar ao cluster do Kubernetes usando o comando az aks get-credentials.

az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>

Implantar um aplicativo

O complemento de roteamento de aplicativos usa anotações em objetos Ingress do Kubernetes para criar os recursos apropriados.

  1. Crie o namespace de aplicativo chamado aks-store para executar os pods de exemplo usando o comando kubectl create namespace.

    kubectl create namespace aks-store
    
  2. Implante o aplicativo de repositório do AKS usando o seguinte arquivo de manifesto YAML:

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/sample-manifests/docs/app-routing/aks-store-deployments-and-services.yaml -n aks-store
    

Esse manifesto criará as implantações e os serviços necessários para o aplicativo de repositório do AKS.

Criar o objeto De entrada

O complemento de roteamento de aplicativos cria uma classe Ingress no cluster chamada webapprouting.Kubernetes.azure.com. Quando você cria um objeto Ingress com essa classe, ela ativa o complemento.

  1. Copie o manifesto YAML a seguir em um novo arquivo chamado ingress.yaml e salve o arquivo no computador local.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: store-front
      namespace: aks-store
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
      - http:
          paths:
          - backend:
              service:
                name: store-front
                port:
                  number: 80
            path: /
            pathType: Prefix
    
  2. Crie o recurso de entrada usando o kubectl apply comando.

    kubectl apply -f ingress.yaml -n aks-store
    

    O seguinte exemplo de saída mostra o recurso criado:

    ingress.networking.k8s.io/store-front created
    

Verificar se a entrada gerenciada foi criada

Verifique se a entrada gerenciada foi criada usando o comando kubectl get ingress.

kubectl get ingress -n aks-store

O seguinte exemplo de saída mostra a entrada gerenciada criada:

NAME          CLASS                                HOSTS   ADDRESS       PORTS   AGE
store-front   webapprouting.kubernetes.azure.com   *       51.8.10.109   80      110s

Verifique se o repositório do AKS funciona apontando o navegador para o endereço IP público do controlador de entrada. Localize o endereço IP com o kubectl:

kubectl get service -n app-routing-system nginx -o jsonpath="{.status.loadBalancer.ingress[0].ip}"

Remova a visão geral do complemento de roteamento de aplicativos

Para remover o namespace associado, use o comando kubectl delete namespace.

kubectl delete namespace aks-store

Para remover o complemento de roteamento de aplicativos do cluster, use o comando az aks approuting disable.

az aks approuting disable --name <ClusterName> --resource-group <ResourceGroupName>

Observação

Para evitar possíveis interrupções de tráfego no cluster quando o complemento de roteamento de aplicativos estiver desabilitado, alguns recursos do Kubernetes, incluindo configMaps, segredos e a implantação que executa o controlador, permanecerão no cluster. Esses recursos estão no namespace app-routing-system Você poderá remover esses recursos se eles não forem mais necessários excluindo o namespace com kubectl delete ns app-routing-system.

Próximas etapas