Partilhar via


Configurar um nome de domínio personalizado e um certificado SSL com o complemento de roteamento de aplicativo

Um Ingress é um objeto de API que define regras, que permitem acesso externo a serviços em um cluster do Serviço Kubernetes do Azure (AKS). Quando você cria um objeto Ingress que usa as classes nginx Ingress do complemento de roteamento de aplicativos, o complemento cria, configura e gerencia um ou mais controladores Ingress em seu cluster AKS.

Este artigo mostra como configurar uma configuração avançada de Ingresso para criptografar o tráfego com certificados SSL/TLS armazenados em um Cofre de Chaves do Azure e usar o DNS do Azure para gerenciar zonas DNS.

Complemento de roteamento de aplicativos com recursos nginx

O complemento de roteamento de aplicativos com nginx oferece o seguinte:

  • Fácil configuração de controladores nginx Ingress gerenciados.
  • Integração com um DNS externo, como o DNS do Azure, para gerenciamento de zonas globais e privadas
  • Terminação SSL com certificados armazenados em um cofre de chaves, como o Azure Key Vault.

Pré-requisitos

  • Um cluster AKS com o complemento de roteamento de aplicativos.
  • Azure Key Vault se você quiser configurar o término SSL e armazenar certificados no cofre hospedado no Azure.
  • DNS do Azure se você quiser configurar o gerenciamento de zona global e privada e hospedá-los no Azure.
  • Para anexar um Cofre da Chave do Azure ou uma Zona DNS do Azure, precisa da função de Proprietário, administrador da conta do Azure ou coadministrador do Azure na sua subscrição do Azure.
  • Todas as zonas DNS públicas devem estar na mesma assinatura e no mesmo grupo de recursos.

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.

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

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

Encerrar o tráfego HTTPS com certificados do Azure Key Vault

Para habilitar o suporte para tráfego HTTPS, consulte os seguintes pré-requisitos:

Criar um Cofre da Chave do Azure para armazenar o certificado

Nota

Se já tiver um Cofre da Chave do Azure, pode ignorar este passo.

Crie um Cofre da Chave do Azure usando o az keyvault create comando.

az keyvault create --resource-group <ResourceGroupName> --location <Location> --name <KeyVaultName> --enable-rbac-authorization true

Criar e exportar um certificado SSL autoassinado

Para testes, você pode usar um certificado público autoassinado em vez de um certificado assinado pela Autoridade de Certificação (CA). Se já tiver um certificado, pode ignorar este passo.

Atenção

Certificados autoassinados são certificados digitais que não são assinados por uma CA de terceiros confiável. Os certificados autoassinados são criados, emitidos e assinados pela empresa ou desenvolvedor responsável pelo site ou software que está sendo assinado. É por isso que os certificados autoassinados são considerados inseguros para sites e aplicativos voltados para o público. O Azure Key Vault tem uma parceria confiável com algumas Autoridades de Certificação.

  1. Crie um certificado SSL autoassinado para usar com o Ingress usando o openssl req comando. Certifique-se de que substitui <Hostname> pelo nome DNS que está a utilizar.

    openssl req -new -x509 -nodes -out aks-ingress-tls.crt -keyout aks-ingress-tls.key -subj "/CN=<Hostname>" -addext "subjectAltName=DNS:<Hostname>"
    
  2. Exporte o certificado SSL e ignore o prompt de senha usando o openssl pkcs12 -export comando.

    openssl pkcs12 -export -in aks-ingress-tls.crt -inkey aks-ingress-tls.key -out aks-ingress-tls.pfx
    

Importar certificado para o Azure Key Vault

Importe o certificado SSL para o Azure Key Vault usando o az keyvault certificate import comando. Se o seu certificado estiver protegido por palavra-passe, pode passar a palavra-passe através da --password bandeira.

az keyvault certificate import --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --file aks-ingress-tls.pfx [--password <certificate password if specified>]

Importante

Para permitir que o complemento recarregue certificados do Cofre de Chaves do Azure quando eles forem alterados, você deve habilitar o recurso de rotação automática secreta do driver CSI do Repositório Secreto com o --enable-secret-rotation argumento. Quando a rotação automática está ativada, o driver atualiza a montagem do pod e o segredo do Kubernetes pesquisando as alterações periodicamente, com base no intervalo de pesquisa de rotação definido. O intervalo de sondagem de rotação padrão é de dois minutos.

Habilitar a integração do Azure Key Vault

Em um cluster com o complemento de roteamento de aplicativo habilitado, use o az aks approuting update comando usando os --enable-kv argumentos e --attach-kv para habilitar o provedor do Azure Key Vault para o Driver CSI do Repositório de Segredos e aplique as atribuições de função necessárias.

O Azure Key Vault oferece dois sistemas de autorização: o controle de acesso baseado em função do Azure (Azure RBAC), que opera no plano de gerenciamento, e o modelo de política de acesso, que opera no plano de gerenciamento e no plano de dados. A --attach-kv operação escolherá o modelo de acesso adequado a ser usado.

Nota

O az aks approuting update --attach-kv comando usa as permissões do usuário que executa o comando para criar a atribuição de função do Azure Key Vault. Essa função é atribuída à identidade gerenciada do complemento. Para obter mais informações sobre identidades gerenciadas pelo AKS, consulte Resumo de identidades gerenciadas.

Recupere a ID do recurso do Azure Key Vault.

KEYVAULTID=$(az keyvault show --name <KeyVaultName> --query "id" --output tsv)

Em seguida, atualize o complemento de roteamento de aplicativo para habilitar o driver CSI do repositório secreto do Azure Key Vault e aplicar a atribuição de função.

az aks approuting update --resource-group <ResourceGroupName> --name <ClusterName> --enable-kv --attach-kv ${KEYVAULTID}

Habilitar a integração do DNS do Azure

Para habilitar o suporte para zonas DNS, revise o seguinte pré-requisito:

  • O complemento de roteamento de aplicativo pode ser configurado para criar automaticamente registros em uma ou mais zonas DNS globais e privadas do Azure para hosts definidos em recursos de Ingresso. Todas as zonas DNS globais do Azure precisam estar no mesmo grupo de recursos e todas as zonas DNS privadas do Azure precisam estar no mesmo grupo de recursos. Se você não tiver uma zona DNS do Azure, poderá criar uma.

Criar uma zona DNS pública do Azure

Nota

Se já tiver uma Zona DNS do Azure, pode ignorar este passo.

  1. Crie uma zona DNS do Azure usando o az network dns zone create comando.

    az network dns zone create --resource-group <ResourceGroupName> --name <ZoneName>
    

Anexar a zona DNS 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 de Zona DNS do Azure. Essa função é 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.

    ZONEID=$(az network dns zone show --resource-group <ResourceGroupName> --name <ZoneName> --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.

    az aks approuting zone add --resource-group <ResourceGroupName> --name <ClusterName> --ids=${ZONEID} --attach-zones
    

Criar a Entrada que usa um nome de host e um certificado do Cofre da Chave do Azure

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

  1. Obtenha o URI do certificado para usar na Entrada do Cofre de Chaves do Azure usando o az keyvault certificate show comando.

    az keyvault certificate show --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --query "id" --output tsv
    

    A saída de exemplo a seguir mostra o URI do certificado retornado do comando:

    https://KeyVaultName.vault.azure.net/certificates/KeyVaultCertificateName/ea62e42260f04f17a9309d6b87aceb44
    
  2. Copie o seguinte manifesto YAML em um novo arquivo chamado ingress.yaml e salve o arquivo em seu computador local.

    Atualize <Hostname> com o nome do seu host DNS e <KeyVaultCertificateUri> com o URI retornado do comando para consultar o Azure Key Vault na etapa 1 acima. O valor da cadeia de caracteres para *<KeyVaultCertificateUri>* deve incluir https://yourkeyvault.vault.azure.net/certificates/certnameapenas . A versão do certificado no final da cadeia de caracteres URI deve ser omitida para obter a versão atual.

    A secretName chave na tls seção define o nome do segredo que contém o certificado para este recurso de entrada. Este certificado é apresentado no navegador quando um cliente navega para a URL especificada na <Hostname> chave. Certifique-se de que o valor de secretName é igual ao keyvault- seguido pelo valor do nome do recurso de entrada (de metadata.name). No exemplo YAML, secretName precisa ser igual a keyvault-<your Ingress name>.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.azure.com/tls-cert-keyvault-uri: <KeyVaultCertificateUri>
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
      - host: <Hostname>
        http:
          paths:
          - backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
            path: /
            pathType: Prefix
      tls:
      - hosts:
        - <Hostname>
        secretName: keyvault-<your ingress name>
    
  3. Crie os recursos de cluster usando o kubectl apply comando.

    kubectl apply -f ingress.yaml -n hello-web-app-routing
    

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

    Ingress.networking.k8s.io/aks-helloworld 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 hello-web-app-routing

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

NAME             CLASS                                HOSTS               ADDRESS       PORTS     AGE
aks-helloworld   webapprouting.kubernetes.azure.com   myapp.contoso.com   20.51.92.19   80, 443   4m

Próximos passos

Saiba mais sobre como monitorar as métricas do controlador Ingress-nginx incluídas no complemento de roteamento de aplicativos com o Prometheus in Grafana como parte da análise do desempenho e do uso do seu aplicativo.