Een aangepaste domeinnaam en SSL-certificaat instellen met de invoegtoepassing voor toepassingsroutering
Een toegangsbeheerobject is een API-object dat regels definieert, waardoor externe toegang tot services in een AKS-cluster (Azure Kubernetes Service) is toegestaan. Wanneer u een inkomend object maakt dat gebruikmaakt van de invoegtoepassing voor toepassingsroutering nginx Inkomend verkeer, maakt, configureert en beheert de invoegtoepassing een of meer ingangscontrollers in uw AKS-cluster.
In dit artikel leest u hoe u een geavanceerde configuratie voor inkomend verkeer instelt om het verkeer te versleutelen met SSL/TLS-certificaten die zijn opgeslagen in een Azure Key Vault en Hoe u Azure DNS gebruikt om DNS-zones te beheren.
Invoegtoepassing voor toepassingsroutering met nginx-functies
De invoegtoepassing voor toepassingsroutering met nginx levert het volgende:
- Eenvoudige configuratie van beheerde nginx-ingangscontrollers.
- Integratie met een externe DNS, zoals Azure DNS voor globaal en privézonebeheer
- SSL-beëindiging met certificaten die zijn opgeslagen in een sleutelkluis, zoals Azure Key Vault.
Vereisten
- Een AKS-cluster met de invoegtoepassing voor toepassingsroutering.
- Azure Key Vault als u SSL-beëindiging wilt configureren en certificaten wilt opslaan in de kluis die wordt gehost in Azure.
- Azure DNS als u globaal en privézonebeheer wilt configureren en deze in Azure wilt hosten.
- Als u een Azure Key Vault of Azure DNS-zone wilt koppelen, hebt u de rol Eigenaar, Azure-accountbeheerder of Co-beheerder van Azure nodig voor uw Azure-abonnement.
- Alle openbare DNS-zones moeten zich in hetzelfde abonnement en dezelfde resourcegroep bevinden.
Verbinding maken met uw AKS-cluster
Als u vanaf uw lokale computer verbinding wilt maken met het Kubernetes-cluster, gebruikt kubectl
u de Kubernetes-opdrachtregelclient. U kunt deze lokaal installeren met behulp van de opdracht az aks install-cli . Als u Azure Cloud Shell gebruikt, is kubectl
al geïnstalleerd.
Configureer kubectl om verbinding te maken met uw Kubernetes-cluster met behulp van de az aks get-credentials
opdracht.
az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>
HTTPS-verkeer beëindigen met certificaten van Azure Key Vault
Als u ondersteuning voor HTTPS-verkeer wilt inschakelen, raadpleegt u de volgende vereisten:
- Een SSL-certificaat. Als u nog geen certificaat hebt, kunt u een certificaat maken.
Een Azure Key Vault maken om het certificaat op te slaan
Notitie
Als u al een Azure Key Vault hebt, kunt u deze stap overslaan.
Maak een Azure Key Vault met behulp van de az keyvault create
opdracht.
az keyvault create --resource-group <ResourceGroupName> --location <Location> --name <KeyVaultName> --enable-rbac-authorization true
Een zelfondertekend SSL-certificaat maken en exporteren
Voor testen kunt u een zelfondertekend openbaar certificaat gebruiken in plaats van een certificaat dat is ondertekend met een certificeringsinstantie (CA). Als u al een certificaat hebt, kunt u deze stap overslaan.
Let op
Zelfondertekende certificaten zijn digitale certificaten die niet zijn ondertekend door een vertrouwde certificeringsinstantie van derden. Zelfondertekende certificaten worden gemaakt, uitgegeven en ondertekend door het bedrijf of de ontwikkelaar die verantwoordelijk is voor de website of software die wordt ondertekend. Daarom worden zelfondertekende certificaten als onveilig beschouwd voor openbare websites en toepassingen. Azure Key Vault heeft een vertrouwde samenwerking met de enkele certificeringsinstanties.
Maak een zelfondertekend SSL-certificaat voor gebruik met het toegangsbeheerobject met behulp van de
openssl req
opdracht. Zorg ervoor dat u vervangt door<Hostname>
de DNS-naam die u gebruikt.openssl req -new -x509 -nodes -out aks-ingress-tls.crt -keyout aks-ingress-tls.key -subj "/CN=<Hostname>" -addext "subjectAltName=DNS:<Hostname>"
Exporteer het SSL-certificaat en sla de wachtwoordprompt over met behulp van de
openssl pkcs12 -export
opdracht.openssl pkcs12 -export -in aks-ingress-tls.crt -inkey aks-ingress-tls.key -out aks-ingress-tls.pfx
Certificaat importeren in Azure Key Vault
Importeer het SSL-certificaat in Azure Key Vault met behulp van de az keyvault certificate import
opdracht. Als uw certificaat is beveiligd met een wachtwoord, kunt u het wachtwoord doorgeven via de --password
vlag.
az keyvault certificate import --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --file aks-ingress-tls.pfx [--password <certificate password if specified>]
Belangrijk
Als u de invoegtoepassing wilt inschakelen voor het opnieuw laden van certificaten uit Azure Key Vault wanneer deze worden gewijzigd, moet u de functie voor automatischerotatie van het geheimarchief-CSI-stuurprogramma inschakelen met het --enable-secret-rotation
argument. Wanneer automatischerotatie is ingeschakeld, werkt het stuurprogramma de podkoppeling en het Kubernetes-geheim bij door periodiek te peilen naar wijzigingen, op basis van het rotatiepollinterval dat u definieert. Het standaardinterval voor rotatiepeiling is twee minuten.
Integratie van Azure Key Vault inschakelen
Gebruik op een cluster waarvoor de invoegtoepassing voor toepassingsroutering is ingeschakeld de az aks approuting update
opdracht --enable-kv
en --attach-kv
argumenten om de Azure Key Vault-provider in te schakelen voor het stuurprogramma Secrets Store CSI en de vereiste roltoewijzingen toe te passen.
Azure Key Vault biedt twee autorisatiesystemen: op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC), dat op het beheervlak werkt en het toegangsbeleidsmodel, dat zowel op het beheervlak als op het gegevensvlak werkt. De --attach-kv
bewerking kiest het juiste toegangsmodel dat moet worden gebruikt.
Notitie
De az aks approuting update --attach-kv
opdracht gebruikt de machtigingen van de gebruiker die de opdracht uitvoert om de Azure Key Vault-roltoewijzing te maken. Deze rol wordt toegewezen aan de beheerde identiteit van de invoegtoepassing. Zie Samenvatting van beheerde identiteiten in AKS voor meer informatie over beheerde AKS-identiteiten.
Haal de Resource-id van Azure Key Vault op.
KEYVAULTID=$(az keyvault show --name <KeyVaultName> --query "id" --output tsv)
Werk vervolgens de invoegtoepassing voor app-routering bij om het CSI-stuurprogramma voor het geheimarchief van Azure Key Vault in te schakelen en de roltoewijzing toe te passen.
az aks approuting update --resource-group <ResourceGroupName> --name <ClusterName> --enable-kv --attach-kv ${KEYVAULTID}
Azure DNS-integratie inschakelen
Als u ondersteuning voor DNS-zones wilt inschakelen, controleert u de volgende vereisten:
- De invoegtoepassing voor app-routering kan worden geconfigureerd om automatisch records te maken in een of meer globale en privé-DNS-zones van Azure voor hosts die zijn gedefinieerd op toegangsbeheerresources. Alle globale Azure DNS-zones moeten zich in dezelfde resourcegroep bevinden en alle privé-Azure DNS-zones moeten zich in dezelfde resourcegroep bevinden. Als u geen Azure DNS-zone hebt, kunt u er een maken.
Een openbare Azure DNS-zone maken
Notitie
Als u al een Azure DNS-zone hebt, kunt u deze stap overslaan.
Maak een Azure DNS-zone met behulp van de
az network dns zone create
opdracht.az network dns zone create --resource-group <ResourceGroupName> --name <ZoneName>
Azure DNS-zone koppelen aan de invoegtoepassing voor toepassingsroutering
Notitie
De az aks approuting zone add
opdracht gebruikt de machtigingen van de gebruiker die de opdracht uitvoert om de azure DNS-zoneroltoewijzing te maken. Deze rol wordt toegewezen aan de beheerde identiteit van de invoegtoepassing. Zie Samenvatting van beheerde identiteiten in AKS voor meer informatie over beheerde AKS-identiteiten.
Haal de resource-id voor de DNS-zone op met behulp van de
az network dns zone show
opdracht en stel de uitvoer in op een variabele met de naam ZONEID.ZONEID=$(az network dns zone show --resource-group <ResourceGroupName> --name <ZoneName> --query "id" --output tsv)
Werk de invoegtoepassing bij om de integratie met Azure DNS in te schakelen met behulp van de
az aks approuting zone
opdracht. U kunt een door komma's gescheiden lijst met resource-id's voor DNS-zone doorgeven.az aks approuting zone add --resource-group <ResourceGroupName> --name <ClusterName> --ids=${ZONEID} --attach-zones
Het toegangsbeheerobject maken dat gebruikmaakt van een hostnaam en een certificaat van Azure Key Vault
De invoegtoepassing voor toepassingsroutering maakt een toegangsbeheerobjectklasse op het cluster met de naam webapprouting.kubernetes.azure.com. Wanneer u een inkomend object met deze klasse maakt, wordt de invoegtoepassing geactiveerd.
Haal de certificaat-URI op die moet worden gebruikt in het toegangsbeheerobject van Azure Key Vault met behulp van de
az keyvault certificate show
opdracht.az keyvault certificate show --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --query "id" --output tsv
In de volgende voorbeelduitvoer ziet u de certificaat-URI die is geretourneerd door de opdracht:
https://KeyVaultName.vault.azure.net/certificates/KeyVaultCertificateName/ea62e42260f04f17a9309d6b87aceb44
Kopieer het volgende YAML-manifest naar een nieuw bestand met de naam ingress.yaml en sla het bestand op uw lokale computer op.
Werk
<Hostname>
bij met de naam van uw DNS-host en<KeyVaultCertificateUri>
met de URI die is geretourneerd vanuit de opdracht om een query uit te voeren op Azure Key Vault in stap 1 hierboven. De tekenreekswaarde waarvoor*<KeyVaultCertificateUri>*
moet alleen worden opgenomenhttps://yourkeyvault.vault.azure.net/certificates/certname
. De certificaatversie aan het einde van de URI-tekenreeks moet worden weggelaten om de huidige versie op te halen.De
secretName
sleutel in detls
sectie definieert de naam van het geheim dat het certificaat voor deze toegangsbeheerresource bevat. Dit certificaat wordt weergegeven in de browser wanneer een client naar de URL bladert die is opgegeven in de<Hostname>
sleutel. Zorg ervoor dat de waardesecretName
gelijk is aankeyvault-
gevolgd door de waarde van de resourcenaam voor inkomend verkeer (vanmetadata.name
). In het voorbeeld van YAMLsecretName
moet deze gelijk zijn aankeyvault-<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>
Maak de clusterbronnen met behulp van de
kubectl apply
opdracht.kubectl apply -f ingress.yaml -n hello-web-app-routing
In de volgende voorbeelduitvoer ziet u de gemaakte resource:
Ingress.networking.k8s.io/aks-helloworld created
Controleren of het beheerde inkomend verkeer is gemaakt
U kunt controleren of het beheerde inkomend verkeer is gemaakt met behulp van de kubectl get ingress
opdracht.
kubectl get ingress -n hello-web-app-routing
In de volgende voorbeelduitvoer ziet u het gemaakte beheerde inkomend verkeer:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld webapprouting.kubernetes.azure.com myapp.contoso.com 20.51.92.19 80, 443 4m
Volgende stappen
Meer informatie over het bewaken van de metrische gegevens voor inkomend-nginx-controller die zijn opgenomen in de invoegtoepassing voor toepassingsroutering met Prometheus in Grafana als onderdeel van het analyseren van de prestaties en het gebruik van uw toepassing.
Azure Kubernetes Service