Partilhar via


Configure um nome de domínio personalizado e um certificado SSL com o add-on de encaminhamento de aplicações para o Azure Kubernetes Service (AKS)

Este artigo mostra-lhe como configurar nomes de domínio personalizados e certificados SSL/TLS para entradas AKS usando Azure Key Vault e Azure DNS com o add-on de encaminhamento de aplicações para AKS.

Prerequisites

  • Um cluster AKS com o complemento de encaminhamento de aplicações.

  • Use o Azure Key Vault para configurar a terminação SSL e armazenar certificados no cofre hospedado no Azure. Se não tiveres um, vê Criar um cofre de chaves usando a CLI do Azure.

  • Para permitir suporte ao tráfego HTTPS, precisa de um certificado SSL. Se não tiveres nenhum, vê criar um certificado.

  • DNS do Azure se você quiser configurar o gerenciamento de zona global e privada e hospedá-los no Azure. Se você não tiver uma zona DNS do Azure, poderá criar uma. Para permitir o suporte para zonas DNS:

    • Todas as zonas DNS globais do Azure têm de estar no mesmo grupo de recursos, o que pode ser diferente do grupo de recursos do cluster.
    • Todas as zonas DNS privadas do Azure têm de estar no mesmo grupo de recursos, o que pode ser diferente do grupo de recursos do cluster.
    • O grupo de recursos não precisa estar na mesma assinatura que o cluster.

Permissões do Azure necessárias

A sua conta de utilizador precisa de: Proprietário, administrador da conta Azure ou co-administrador Azure na sua subscrição Azure.

O que fazem os comandos: Quando executa az aks approuting update --attach-kv ou az aks approuting zone add --attach-zones, estes comandos usam as suas permissões de atribuição de funções para conceder automaticamente à identidade gerida do add-on de roteamento de aplicações as seguintes funções:

  • Papel de utilizador do Key Vault Certificate no seu Azure Key Vault (para acesso a certificados).
  • Função de Contribuidor de Zona DNS nas suas zonas DNS Azure (para gestão de registos DNS).

Para obter mais informações sobre identidades gerenciadas pelo AKS, consulte Resumo de identidades gerenciadas.

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 az aks install-cli comando. 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.

    # Set environment variables for your resource group and cluster name
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    # Get the AKS cluster credentials
    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    

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.

Caution

Certificados auto-assinados são certificados digitais que não são assinados por uma CA terceira de confiança. A empresa ou programador responsável pelo site ou software cria, emite e assina estes certificados. É 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 auto-assinado para usar com a entrada usando o openssl req comando. Certifique-se de que substitui <host-name> pelo nome DNS que está a utilizar.

    openssl req -new -x509 -nodes -out aks-ingress-tls.crt -keyout aks-ingress-tls.key -subj "/CN=<host-name>" -addext "subjectAltName=DNS:<host-name>"
    
  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 um certificado SSL auto-assinado 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.

    # Set environment variables for your key vault name and certificate name
    export KEY_VAULT_NAME=<key-vault-name>
    export KEY_VAULT_CERT_NAME=<key-vault-certificate-name>
    
    # Import the SSL certificate into Azure Key Vault
    az keyvault certificate import --vault-name $KEY_VAULT_NAME --name $KEY_VAULT_CERT_NAME --file aks-ingress-tls.pfx [--password <certificate password if specified>]
    

Note

Para permitir que o complemento de encaminhamento de aplicações recarregue certificados do Azure Key Vault quando estes mudam, deve ativar a funcionalidade de autorrotação secreta do driver CSI da Secrets Store. 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

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 seleciona o modelo de acesso apropriado a utilizar.

  1. Obtenha o ID do recurso para o cofre de chaves usando o az keyvault show comando e defina a saída para uma variável de ambiente.

    KEY_VAULT_ID=$(az keyvault show --name <KeyVaultName> --query "id" --output tsv)
    
  2. Atualize o add-on de encaminhamento de aplicações para ativar o fornecedor Azure Key Vault para o Secrets Store CSI Driver e aplique as atribuições de funções necessárias usando o comando az aks approuting update com os argumentos --enable-kv e --attach-kv.

    az aks approuting update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-kv --attach-kv ${KEY_VAULT_ID}
    

Criar uma zona DNS Azure global

Se já tens uma zona DNS Azure, podes saltar este passo.

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

    # Set environment variables for your resource group and DNS zone name
    export RESOURCE_GROUP=<resource-group-name>
    export ZONE_NAME=<zone-name>
    
    # Create the Azure DNS zone
    az network dns zone create --resource-group $RESOURCE_GROUP --name $ZONE_NAME
    

Habilitar a integração do DNS do Azure

  1. Obtenha o ID do recurso para a zona DNS usando o az network dns zone show comando e defina a saída para uma variável de ambiente.

    ZONE_ID=$(az network dns zone show --resource-group $RESOURCE_GROUP --name $ZONE_NAME --query "id" --output tsv)
    
  2. Atualize o complemento de encaminhamento de aplicações para permitir a integração com o Azure DNS 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 $RESOURCE_GROUP --name $CLUSTER_NAME --ids=${ZONE_ID} --attach-zones
    

Crie uma classe Ingress que utilize um nome de anfitrião e um certificado do Azure Key Vault

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 Azure Key Vault usando o az keyvault certificate show comando.

    az keyvault certificate show --vault-name $KEY_VAULT_NAME --name $KEY_VAULT_CERT_NAME --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/ab12c34567d89e01f2345g6h78ijkl90
    
  2. Copie o seguinte manifesto YAML em um novo arquivo chamado ingress.yaml e salve o arquivo em seu computador local.

    Atualiza <host-name> com o nome do teu host DNS e <key-vault-certificate-uri> com o URI devolvido do comando anterior. O valor da cadeia de caracteres para <key-vault-certificate-uri> deve incluir apenas https://yourkeyvault.vault.azure.net/certificates/certname. Remova a Versão do Certificado no final da cadeia de URI para obter a versão atual.

    A secretName chave na tls secção define o nome do segredo que contém o certificado para este recurso de Ingress. Este certificado é apresentado no navegador quando um cliente navega para a URL especificada na <host-name> 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: <key-vault-certificate-uri>
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
      - host: <host-name>
        http:
          paths:
          - backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
            path: /
            pathType: Prefix
      tls:
      - hosts:
        - <host-name>
        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 a entrada gerenciada foi criada

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

    kubectl get ingress -n hello-web-app-routing
    

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

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

Saiba como monitorizar as métricas do controlador NGINX Ingress incluídas no complemento de encaminhamento de aplicações com o Prometheus no Grafana , como parte da análise do desempenho e utilização da sua aplicação.