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 kubectl
o 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:
- Um certificado SSL. Se não tiver um, pode criar um certificado.
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.
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>"
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.
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.
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)
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.
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
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 incluirhttps://yourkeyvault.vault.azure.net/certificates/certname
apenas . A versão do certificado no final da cadeia de caracteres URI deve ser omitida para obter a versão atual.A
secretName
chave natls
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 desecretName
é igual aokeyvault-
seguido pelo valor do nome do recurso de entrada (demetadata.name
). No exemplo YAML,secretName
precisa ser igual akeyvault-<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>
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.
Azure Kubernetes Service