Configurar um nome de domínio personalizado e um certificado SSL com o complemento de roteamento de aplicativo
Uma entrada é um objeto de API que define regras, que permitem acesso externo aos serviços em um cluster do AKS (Serviço de Kubernetes do Azure). Quando você cria um objeto Ingress que usa as classes Ingress do NGINX do complemento de roteamento de aplicativos, o complemento cria, configura e gerencia um ou mais controladores de entrada no cluster do AKS.
Este artigo mostra como definir uma configuração avançada de entrada para criptografar o tráfego com certificados SSL/TLS armazenados no Azure Key Vault e usar o DNS do Azure para gerenciar zonas DNS.
Complemento de roteamento de aplicativos com recursos do NGINX
O complemento de roteamento de aplicativos com o NGINX fornece o seguinte:
- Configuração fácil de Controladores de entrada nginx gerenciados.
- Integração a um DNS externo, como o DNS do Azure, para gerenciamento de zona privada e global
- Terminação SSL com certificados armazenados em um cofre de chaves, como o Azure Key Vault.
Pré-requisitos
- Um cluster do AKS com o complemento de roteamento de aplicativos.
- Azure Key Vault, caso você deseje configurar a terminação SSL e armazenar certificados no cofre hospedado no Azure.
- DNS do Azure, caso você deseje configurar o gerenciamento de zona privada e global e hospedá-los no Azure.
- Para anexar um Azure Key Vault ou uma Zona DNS do Azure, você precisará da função Proprietário, Administrador de conta do Azure ou Coadministrador do Azure em sua assinatura do Azure.
- Todas as zonas DNS públicas devem estar na mesma assinatura e no Grupo de Recursos.
Conectar-se ao cluster do AKS
Para se conectar ao cluster do Kubernetes no computador local, use o kubectl
, o cliente de linha de comando do Kubernetes. Instale-o localmente usando 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 seu cluster do Kubernetes usando o comando az aks get-credentials
.
az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>
Encerrar o tráfego HTTPS com certificados do Azure Key Vault
A fim de habilitar o suporte para o tráfego HTTPS, confira os seguintes pré-requisitos:
- Um certificado SSL. Caso você não tenha um, crie um certificado.
Criar um Azure Key Vault para armazenar o certificado
Observação
Se você já tiver um Azure Key Vault, pode ignorar esta etapa.
Crie um Azure Key Vault usando o comando az keyvault create
.
az keyvault create --resource-group <ResourceGroupName> --location <Location> --name <KeyVaultName> --enable-rbac-authorization true
Criar e exportar um certificado SSL autoassinado
Para teste, você pode usar um certificado público autoassinado em vez de um certificado assinado por AC (autoridade de certificação). Se você já tiver um certificado, ignore esta etapa.
Cuidado
Certificados autoassinados são certificados digitais que não são assinados por uma AC de terceiros confiável. Os certificados autoassinados são criados, emitidos e assinados pela empresa ou pelo desenvolvedor responsável pelo site ou software que está sendo assinado. É por isso que os certificados autoassinados são considerados não seguros para sites e aplicativos voltados para o público. O Azure Key Vault tem uma parceria confiável com as seguintes Autoridades de Certificação.
Crie um certificado SSL autoassinado para usar com a entrada por meio do comando
openssl req
. Substitua<Hostname>
pelo nome DNS que você está usando.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 comando
openssl pkcs12 -export
.openssl pkcs12 -export -in aks-ingress-tls.crt -inkey aks-ingress-tls.key -out aks-ingress-tls.pfx
Importar o certificado para o Azure Key Vault
Importe o certificado SSL para o Azure Key Vault usando o comando az keyvault certificate import
. Se o certificado estiver protegido por senha, você poderá passar a senha pelo sinalizador --password
.
az keyvault certificate import --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --file aks-ingress-tls.pfx [--password <certificate password if specified>]
Importante
Para habilitar o complemento para recarregar certificados do Azure Key Vault quando eles forem alterados, habilite o recurso de autorrotação secreta do driver CSI do Repositório Secreto com o argumento --enable-secret-rotation
. Quando a rotação automática é habilitada, o driver atualiza a montagem do pod e o segredo do Kubernetes sondando as alterações periodicamente, com base no intervalo de sondagem de rotação que você definiu. O intervalo de sondagem de rotação padrão é de dois minutos.
Habilitar integração do Azure Key Vault
Em um cluster com o complemento de roteamento de aplicativo habilitado, use o comando az aks approuting update
com os argumentos --enable-kv
e --attach-kv
a fim de habilitar o provedor do Azure Key Vault para o Driver CSI do Repositório de Segredos e aplique as atribuições de função obrigatórias.
O Azure Key Vault oferece dois sistemas de autorizaçã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 operação --attach-kv
escolherá o modelo de acesso apropriado a ser usado.
Observação
O comando az aks approuting update --attach-kv
usa as permissões do usuário que está executando 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 as identidades gerenciadas do AKS, confira Resumo das 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 aplicativos para habilitar o driver CSI do Repositório de Segredos 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, examine o seguinte pré-requisito:
- O complemento de roteamento de aplicativos pode ser configurado para criar registros automaticamente em uma ou mais zonas DNS privadas e globais do Azure para os hosts definidos nos recursos de entrada. 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. Caso você não tenha uma zona DNS do Azure, crie uma.
Criar uma zona DNS pública do Azure
Observação
Se você já tiver uma Zona DNS do Azure, ignore esta etapa.
Criar uma zona DNS do Azure usando o comando
az network dns zone create
.az network dns zone create --resource-group <ResourceGroupName> --name <ZoneName>
Anexar a zona DNS do Azure ao complemento de roteamento de aplicativos
Observação
O comando az aks approuting zone add
usa as permissões do usuário que está executando o comando para criar a atribuição de função da Zona DNS do Azure. Essa função é atribuída à identidade gerenciada do complemento. Para obter mais informações sobre as identidades gerenciadas do AKS, confira Resumo das identidades gerenciadas.
Recupere a ID do recurso para a zona DNS usando o comando
az network dns zone show
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 comando
az aks approuting zone
. Você pode transmitir uma lista separada por vírgulas de IDs do recurso de zona DNS.az aks approuting zone add --resource-group <ResourceGroupName> --name <ClusterName> --ids=${ZONEID} --attach-zones
Criar a Entrada que usa um nome do host e um certificado do Azure Key Vault
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.
Obtenha o URI de certificado para usar na entrada por meio do Azure Key Vault usando o comando
az keyvault certificate show
.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 manifesto YAML a seguir em um novo arquivo chamado ingress.yaml e salve o arquivo no computador local.
Atualize
<Hostname>
com o nome do 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 apenashttps://yourkeyvault.vault.azure.net/certificates/certname
. A versão do certificado no final da cadeia de caracteres URI deve ser omitida para obter a versão atual.A chave
secretName
na seçãotls
define o nome do segredo que contém o certificado para esse recurso de Entrada. Esse certificado é apresentado no navegador quando um cliente navega até a URL especificada na chave<Hostname>
. Certifique-se de que o valor desecretName
seja igual akeyvault-
seguido do 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 comando
kubectl apply
.kubectl apply -f ingress.yaml -n hello-web-app-routing
O seguinte exemplo de saída mostra o recurso criado:
Ingress.networking.k8s.io/aks-helloworld 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 hello-web-app-routing
O seguinte exemplo de saída mostra a entrada gerenciada criada:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld webapprouting.kubernetes.azure.com myapp.contoso.com 20.51.92.19 80, 443 4m
Próximas etapas
Saiba mais sobre como monitorar as métricas do controlador Ingress-nginx incluídas no complemento de roteamento de aplicativos com o Prometheus no Grafana (versão prévia) como parte da análise de desempenho e uso do aplicativo.
Azure Kubernetes Service