Partilhar via


Configurar o controlador de entrada NGINX para dar suporte à zona DNS privada do Azure com complemento de roteamento de aplicativo

Este artigo mostra como configurar um controlador de entrada NGINX para trabalhar com um balanceador de carga interno do Azure. Também explica como configurar uma zona DNS privada do Azure para permitir a resolução DNS, permitindo que os pontos finais privados resolvam domínios específicos.

Antes de começar

Conecte-se ao cluster AKS

Para se conectar ao cluster do Kubernetes a partir do computador local, use kubectlo cliente de linha de comando do Kubernetes. Você pode instalá-lo localmente usando o comando az aks install-cli . Se utilizar o Azure Cloud Shell, o kubectl já está instalado.

O exemplo a seguir configura a conexão com seu cluster chamado aks-cluster no test-rg usando o az aks get-credentials comando.

az aks get-credentials \
    --resource-group test-rg \
    --name aks-cluster

Criar uma rede virtual

Para publicar uma zona DNS privada em sua rede virtual, especifique uma lista de redes virtuais que têm permissão para resolver registros dentro da zona com links de rede virtual.

O exemplo a seguir cria uma rede virtual chamada vnet-1 no grupo de recursos test-rg e uma sub-rede chamada subnet-1 para criar dentro da rede virtual com um prefixo de endereço específico.

az network vnet create \
  --name vnet-1 \
  --resource-group test-rg \
  --location eastus \
  --address-prefix 10.2.0.0/16 \
  --subnet-name subnet-1 \
  --subnet-prefixes 10.2.0.0/24

Criar uma zona DNS privada do Azure

Nota

Você pode configurar o complemento de roteamento de aplicativo para criar automaticamente registros em uma ou mais zonas DNS globais e privadas do Azure para hosts definidos em recursos de entrada. Todas as zonas DNS globais do Azure e todas as zonas DNS privadas do Azure devem estar no mesmo grupo de recursos.

Crie uma zona DNS usando o comando az network private-dns zone create , especificando o nome da zona e o grupo de recursos no qual criá-la. O exemplo a seguir cria uma zona DNS chamada private.contoso.com no grupo de recursos test-rg .

az network private-dns zone create \
    --resource-group test-rg \
    --name private.contoso.com

Você cria um link de rede virtual para a zona DNS criada anteriormente usando o comando az network private-dns link vnet create . O exemplo a seguir cria um link chamado dns-link para a zona private.contoso.com para a rede virtual vnet-1. Inclua o --registration-enabled parâmetro para especificar que o link não está habilitado para registro.

az network private-dns link vnet create \
    --resource-group test-rg \
    --name dns-link \
    --zone-name private.contoso.com \
    --virtual-network vnet-1 \
    --registration-enabled false

O recurso de registro automático de zona privada do DNS do Azure gerencia registros DNS para máquinas virtuais implantadas em uma rede virtual. Quando você vincula uma rede virtual a uma zona DNS privada com essa configuração habilitada, um registro DNS é criado para cada máquina virtual do Azure para seu nó AKS implantado na rede virtual.

Anexar uma zona DNS privada do Azure ao complemento de roteamento de aplicativo

Nota

O az aks approuting zone add comando usa as permissões do usuário que executa o comando para criar a atribuição de função da Zona DNS do Azure. A função de Colaborador da Zona DNS Privada é uma função interna para gerenciar recursos DNS privados e é atribuída à identidade gerenciada do complemento. Para obter mais informações sobre identidades gerenciadas pelo AKS, consulte Resumo de identidades gerenciadas.

  1. Recupere o ID do recurso para a zona DNS usando o az network dns zone show comando e defina a saída como uma variável chamada ZONEID. O exemplo a seguir consulta a zona private.contoso.com no grupo de recursos test-rg.

    ZONEID=$(az network private-dns zone show \
    --resource-group test-rg \
    --name private.contoso.com \
    --query "id" \
    --output tsv)
    
  2. Atualize o complemento para habilitar a integração com o DNS do Azure usando o az aks approuting zone comando. Você pode passar uma lista separada por vírgulas de IDs de recursos de zona DNS. O exemplo a seguir atualiza o cluster AKS aks-cluster no grupo de recursos test-rg.

    az aks approuting zone add \
    --resource-group test-rg \
    --name aks-cluster \
    --ids=${ZONEID} \
    --attach-zones
    

Crie um controlador de entrada NGINX com um endereço IP privado e um balanceador de carga interno

O complemento de roteamento de aplicativo usa uma definição de recurso personalizada (CRD) do Kubernetes chamada NginxIngressController para configurar controladores de entrada NGINX. Você pode criar mais controladores de entrada ou modificar uma configuração existente.

NginxIngressController O CRD tem um loadBalancerAnnotations campo para controlar o comportamento do serviço do controlador de ingresso NGINX definindo anotações do balanceador de carga. Para obter mais informações sobre anotações do balanceador de carga, consulte Personalizações via anotações do Kubernetes.

Execute as etapas a seguir para criar um controlador de entrada NGINX com um Balanceador de Carga do Azure interno com um endereço IP privado.

  1. Copie o seguinte manifesto YAML em um novo arquivo chamado nginx-internal-controller.yaml e salve o arquivo em seu computador local.

    apiVersion: approuting.kubernetes.azure.com/v1alpha1
    kind: NginxIngressController
    metadata:
      name: nginx-internal
    spec:
      ingressClassName: nginx-internal
      controllerNamePrefix: nginx-internal
      loadBalancerAnnotations: 
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    
  2. Crie os recursos do controlador de ingresso NGINX usando o kubectl apply comando.

    kubectl apply -f nginx-internal-controller.yaml
    

    O exemplo de saída a seguir mostra o recurso criado:

    nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
    
  3. Verifique se o controlador de entrada foi criado

    Você pode verificar o status do controlador de entrada NGINX usando o kubectl get nginxingresscontroller comando.

    kubectl get nginxingresscontroller
    

    A saída de exemplo a seguir mostra o recurso criado. Pode levar alguns minutos para que o controlador esteja disponível:

    NAME             INGRESSCLASS                         CONTROLLERNAMEPREFIX   AVAILABLE
    default          webapprouting.kubernetes.azure.com   nginx                  True
    nginx-internal   nginx-internal                       nginx-internal         True
    

Implementar uma aplicação

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

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

    kubectl create namespace aks-store
    
  2. Implante o aplicativo de armazenamento 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
    

Este manifesto cria as implantações e serviços necessários para o aplicativo de armazenamento AKS.

Criar o recurso de Ingresso que usa um nome de host na zona DNS privada do Azure e um endereço IP privado

Atualize host com o nome do seu host DNS, por exemplo, store-front.private.contoso.com. Verifique se você está especificando nginx-internal para ingressClassName.

  1. Copie o seguinte manifesto YAML em um novo arquivo chamado ingress.yaml e salve o arquivo em seu computador local.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: store-front
      namespace: aks-store
    spec:
      ingressClassName: nginx-internal
      rules:
      - host: store-front.private.contoso.com
        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 exemplo de saída a seguir mostra o recurso criado:

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

Verifique se o Ingress gerenciado foi criado

Você pode verificar se o Ingress gerenciado foi criado usando o kubectl get ingress comando.

kubectl get ingress -n aks-store

A saída de exemplo a seguir mostra o Ingresso gerenciado criado:

NAME          CLASS            HOSTS                             ADDRESS   PORTS   AGE
store-front   nginx-internal   store-front.private.contoso.com             80      10s

Verifique se a zona DNS privada do Azure foi atualizada

Em poucos minutos, execute o comando az network private-dns record-set a list para exibir os registros A para sua zona DNS privada do Azure. Especifique o nome do grupo de recursos e o nome da zona DNS. Neste exemplo, o grupo de recursos é test-rg e a zona DNS é private.contoso.com.

az network private-dns record-set a list \
    --resource-group test-rg \
    --zone-name private.contoso.com

A saída de exemplo a seguir mostra o registro criado:

[
  {
    "aRecords": [
      {
        "ipv4Address": "10.224.0.7"
      }
    ],
    "etag": "ecc303c5-4577-4ca2-b545-d34e160d1c2d",
    "fqdn": "store-front.private.contoso.com.",
    "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/test-rg/providers/Microsoft.Network/privateDnsZones/private.contoso.com/A/store-front",
    "isAutoRegistered": false,
    "name": "store-front",
    "resourceGroup": "test-rg",
    "ttl": 300,
    "type": "Microsoft.Network/privateDnsZones/A"
  }
]

Próximos passos

Para obter outras informações de configuração relacionadas à criptografia SSL, outro controlador de entrada NGINX avançado e configuração de recursos de entrada, revise a configuração de DNS e SSL e a configuração de complementos de roteamento de aplicativos.