Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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-credentialscomando.# 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.
Crie um certificado SSL auto-assinado para usar com a entrada usando o
openssl reqcomando. 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>"Exporte o certificado SSL e ignore o prompt de senha usando o
openssl pkcs12 -exportcomando.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 importcomando. Se o seu certificado estiver protegido por palavra-passe, pode passar a palavra-passe através da--passwordbandeira.# 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.
Obtenha o ID do recurso para o cofre de chaves usando o
az keyvault showcomando e defina a saída para uma variável de ambiente.KEY_VAULT_ID=$(az keyvault show --name <KeyVaultName> --query "id" --output tsv)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 updatecom os argumentos--enable-kve--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 createcomando.# 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
Obtenha o ID do recurso para a zona DNS usando o
az network dns zone showcomando 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)Atualize o complemento de encaminhamento de aplicações para permitir a integração com o Azure DNS usando o
az aks approuting zonecomando. 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.
Obtenha o URI do certificado para usar na entrada do Azure Key Vault usando o
az keyvault certificate showcomando.az keyvault certificate show --vault-name $KEY_VAULT_NAME --name $KEY_VAULT_CERT_NAME --query "id" --output tsvA saída de exemplo a seguir mostra o URI do certificado retornado do comando:
https://KeyVaultName.vault.azure.net/certificates/KeyVaultCertificateName/ab12c34567d89e01f2345g6h78ijkl90Copie 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 apenashttps://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
secretNamechave natlssecçã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 desecretNameé igual aokeyvault-seguido pelo valor do nome do recurso de entrada (demetadata.name). No exemplo YAML,secretNameprecisa ser igual akeyvault-<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>Crie os recursos de cluster usando o
kubectl applycomando.kubectl apply -f ingress.yaml -n hello-web-app-routingO 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 ingresscomando.kubectl get ingress -n hello-web-app-routingO 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
Conteúdo relacionado
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.