Einrichten eines benutzerdefinierten Domänennamens und eines SSL-Zertifikats mit dem Anwendungsrouting-Add-On
Ein Eingang ist ein API-Objekt, das Regeln definiert, die externen Zugriff auf Dienste in einem AKS-Cluster (Azure Kubernetes Service) ermöglichen. Wenn Sie ein Eingangsobjekt erstellen, das die nginx-Eingangsklassen des Anwendungsrouting-Add-Ons verwendet, erstellt, konfiguriert und verwaltet das Add-On einen oder mehrere Eingangsdatencontroller in Ihrem AKS-Cluster.
In diesem Artikel erfahren Sie, wie Sie eine erweiterte Eingangskonfiguration einrichten, um den Datenverkehr mit in Azure Key Vault gespeicherten SSL-/TLS-Zertifikaten zu verschlüsseln, und wie Sie Azure DNS zum Verwalten von DNS-Zonen verwenden.
Anwendungsrouting-Add-On mit nginx-Features
Das Anwendungsrouting-Add-On mit nginx ermöglicht Folgendes:
- Einfache Konfiguration von verwalteten nginx Ingress-Controllern.
- Integration mit einem externen DNS wie Azure DNS für die Verwaltung globaler und privater Zonen
- SSL-Beendigung mit Zertifikaten, die in einem Schlüsseltresor gespeichert sind, z. B. Azure Key Vault
Voraussetzungen
- Ein AKS-Cluster mit dem Anwendungsrouting-Add-On
- Azure Key Vault, wenn Sie SSL-Beendigung konfigurieren und Zertifikate in einem Tresor speichern möchten, der in Azure gehostet wird
- Azure DNS, wenn Sie die Verwaltung globaler und privater Zonen konfigurieren und diese in Azure hosten möchten.
- Um eine Azure Key Vault oder Azure DNS-Zone anzufügen, benötigen Sie die Rolle Besitzer, Azure-Kontoadministrator oder Azure-Co-Administrator in Ihrem Azure-Abonnement.
- Alle öffentlichen DNS-Zonen müssen sich im selben Abonnement und in derselben Ressourcengruppe befinden.
Herstellen einer Verbindung mit dem AKS-Cluster
Zum Herstellen der Verbindung mit dem Kubernetes-Cluster von Ihrem lokalen Computer aus verwenden Sie den Kubernetes-Befehlszeilenclient kubectl
. Mit dem Befehl az aks install-cli können Sie ihn lokal installieren. Wenn Sie Azure Cloud Shell verwenden, ist kubectl
bereits installiert.
Konfigurieren Sie kubectl, um mithilfe des az aks get-credentials
-Befehls eine Verbindung mit Ihrem Kubernetes-Cluster herzustellen.
az aks get-credentials --resource-group <ResourceGroupName> --name <ClusterName>
Beenden des HTTPS-Datenverkehrs mit Zertifikaten aus Azure Key Vault
Informationen zu den Voraussetzungen für das Aktivieren der Unterstützung für HTTPS-Datenverkehr finden Sie unter:
- Ein SSL-Zertifikat. Falls Sie keines haben, können Sie ein Zertifikat erstellen.
Erstellen einer Azure Key Vault-Instanz zum Speichern des Zertifikats
Hinweis
Wenn Sie bereits über einen Azure Key Vault verfügen, können Sie diesen Schritt überspringen.
Erstellen Sie eine Azure Key Vault mithilfe des Befehls az keyvault create
.
az keyvault create --resource-group <ResourceGroupName> --location <Location> --name <KeyVaultName> --enable-rbac-authorization true
Erstellen und Exportieren eines selbstsignierten SSL-Zertifikats
Zu Testzwecken können Sie anstelle eines von einer Zertifizierungsstelle signierten Zertifikats ein selbstsigniertes öffentliches Zertifikat verwenden. Falls Sie bereits über ein Zertifikat verfügen, können Sie diesen Schritt überspringen.
Achtung
Selbstsignierte Zertifikate sind digitale Zertifikate, die nicht von einer vertrauenswürdigen Drittanbieterzertifizierungsstelle signiert wurden. Selbstsignierte Zertifikate werden von den Unternehmen oder Entwickler*innen erstellt, ausgestellt und signiert, die für die signierte Website oder Software verantwortlich sind. Aus diesem Grund gelten selbstsignierte Zertifikate als unsicher für öffentlich zugängliche Websites und Anwendungen. Azure Key Vault verfügt über eine vertrauenswürdige Partnerschaft mit einigen Zertifizierungsstellen.
Erstellen Sie mithilfe des Befehls
openssl req
ein selbstsigniertes SSL-Zertifikat, das für den Eingang verwendet werden soll. Stellen Sie sicher, dass Sie<Hostname>
mit dem DNS-Namen ersetzen, den Sie verwenden.openssl req -new -x509 -nodes -out aks-ingress-tls.crt -keyout aks-ingress-tls.key -subj "/CN=<Hostname>" -addext "subjectAltName=DNS:<Hostname>"
Exportieren Sie das SSL-Zertifikat, und überspringen Sie mithilfe des
openssl pkcs12 -export
-Befehls die Kennworteingabeaufforderung.openssl pkcs12 -export -in aks-ingress-tls.crt -inkey aks-ingress-tls.key -out aks-ingress-tls.pfx
Importieren eines Zertifikats in Azure Key Vault
Importieren Sie das SSL-Zertifikat in den Azure Key Vault mithilfe des az keyvault certificate import
-Befehls. Wenn Ihr Zertifikat kennwortgeschützter ist, können Sie das Kennwort über das Flag --password
übergeben.
az keyvault certificate import --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --file aks-ingress-tls.pfx [--password <certificate password if specified>]
Wichtig
Damit das Add-On Zertifikate aus Azure Key Vault erneut laden kann, wenn diese sich ändern, sollten Sie das Feature für geheime automatische Rotation des CSI-Treibers für den geheimen Speicher mit dem --enable-secret-rotation
-Argument aktivieren. Wenn automatische Rotation aktiviert ist, aktualisiert der Treiber die Podeinbindung und das Kubernetes-Geheimnis, indem er basierend auf dem von Ihnen definierten Rotationsabfrageintervall regelmäßig Änderungen abfragt. Das standardmäßige Rotationsabrufintervall beträgt zwei Minuten.
Azure Key Vault-Integration aktivieren
Verwenden Sie auf einem Cluster mit aktiviertem Anwendungsrouting-Add-On den Befehl az aks approuting update
mit den Argumenten --enable-kv
und --attach-kv
, um den Azure Key Vault-Anbieter für den Secrets Store CSI-Treiber zu aktivieren und die erforderlichen Rollenzuweisungen anzuwenden.
Azure Key Vault bietet zwei Autorisierungssysteme: Rollenbasierte Zugriffssteuerung in Azure (Azure RBAC), die auf der Verwaltungsebene ausgeführt wird, und das Zugriffsrichtlinienmodell, das sowohl auf der Verwaltungsebene als auch auf der Datenebene ausgeführt wird. Der Vorgang --attach-kv
wählt das zu verwendende Zugriffsmodell aus.
Hinweis
Der Befehl az aks approuting update --attach-kv
verwendet die Berechtigungen des Benutzers, der den Befehl zum Erstellen der Azure Key Vault-Rollenzuweisung ausführt. Diese Rolle wird der verwalteten Identität des Add-Ons zugewiesen. Weitere Informationen zu verwalteten AKS-Identitäten finden Sie unter Zusammenfassung der verwalteten Identitäten.
Rufen Sie die Azure Key Vault-Ressourcen-ID ab.
KEYVAULTID=$(az keyvault show --name <KeyVaultName> --query "id" --output tsv)
Aktualisieren Sie dann das Anwendungsrouting-Add-On, um den CSI-Treiber für den Azure Key Vault-Geheimnisspeicher zu aktivieren und die Rollenzuweisung anzuwenden.
az aks approuting update --resource-group <ResourceGroupName> --name <ClusterName> --enable-kv --attach-kv ${KEYVAULTID}
Aktivieren der Azure DNS-Integration
Um die Unterstützung für DNS-Zonen zu aktivieren, beachten Sie die folgenden Voraussetzungen:
- Das Anwendungsrouting-Add-On kann so konfiguriert werden, dass Datensätze automatisch in einer oder mehreren öffentlichen und globalen DNS-Zonen von Azure für Hosts erstellt werden, die für Eingangsressourcen definiert sind. Alle globalen Azure DNS-Zonen müssen sich in derselben Ressourcengruppe befinden, und alle privaten Azure DNS-Zonen müssen sich in derselben Ressourcengruppe befinden. Wenn Sie nicht über eine Azure DNS-Zone verfügen, können Sie eine erstellen.
Erstellen einer öffentlichen Azure DNS-Zone
Hinweis
Wenn Sie bereits über eine Azure DNS-Zone verfügen, können Sie diesen Schritt überspringen.
Erstellen Sie eine Azure DNS-Zone mithilfe des
az network dns zone create
-Befehls.az network dns zone create --resource-group <ResourceGroupName> --name <ZoneName>
Anfügen von Azure DNS-Zone an das Anwendungsrouting-Add-On
Hinweis
Der Befehl az aks approuting zone add
verwendet die Berechtigungen des Benutzers, der den Befehl zum Erstellen der Azure DNS-Zone-Rollenzuweisung ausführt. Diese Rolle wird der verwalteten Identität des Add-Ons zugewiesen. Weitere Informationen zu verwalteten AKS-Identitäten finden Sie unter Zusammenfassung der verwalteten Identitäten.
Rufen Sie die Ressourcen-ID für die DNS-Zone mithilfe des Befehls
az network dns zone show
ab, und legen Sie dabei die Ausgabe auf eine Variable namens ZONEID fest.ZONEID=$(az network dns zone show --resource-group <ResourceGroupName> --name <ZoneName> --query "id" --output tsv)
Aktualisieren Sie das Add-On, um die Integration in Azure DNS mit dem Befehl
az aks approuting zone
zu aktivieren. Sie können eine Komma-separierte Liste Ressourcen-IDs für DNS-Zonen übergeben.az aks approuting zone add --resource-group <ResourceGroupName> --name <ClusterName> --ids=${ZONEID} --attach-zones
Erstellen des Eingangs, der einen Hostnamen und ein Zertifikat aus Azure Key Vault verwendet
Das Anwendungsrouting-Add-On erstellt eine Eingangsklasse im Cluster mit Namen webapprouting.kubernetes.azure.com. Wenn Sie ein Eingangsobjekt mit dieser Klasse erstellen, aktiviert es das Add-On.
Rufen Sie mithilfe des Befehls
az keyvault certificate show
den Zertifikat-URI aus Azure Key Vault ab, der im Eingangsobjekt verwendet werden soll.az keyvault certificate show --vault-name <KeyVaultName> --name <KeyVaultCertificateName> --query "id" --output tsv
Die folgende Beispielausgabe zeigt den vom Befehl zurückgegebenen Zertifikat-URI:
https://KeyVaultName.vault.azure.net/certificates/KeyVaultCertificateName/ea62e42260f04f17a9309d6b87aceb44
Kopieren Sie das folgende YAML-Manifest in eine neue Datei namens ingress.yaml, und speichern Sie die Datei auf Ihrem lokalen Computer.
Aktualisieren Sie
<Hostname>
mit dem Namen Ihres DNS-Hosts und<KeyVaultCertificateUri>
mit dem vom Befehl zurückgegebenen URI, um Azure Key Vault in Schritt 1 oben abzufragen. Der Zeichenfolgenwert für*<KeyVaultCertificateUri>*
sollte nurhttps://yourkeyvault.vault.azure.net/certificates/certname
enthalten. Die Zertifikatversion am Ende der URI-Zeichenfolge sollte weggelassen werden, um die aktuelle Version abzurufen.Der Schlüssel
secretName
im Abschnitttls
definiert den Namen des Geheimnisses, das das Zertifikat für diese Eingangsressource enthält. Dieses Zertifikat wird im Browser angezeigt, wenn ein Client die im<Hostname>
-Schlüssel angegebene URL aufruft. Stellen Sie sicher, dass der Wert vonsecretName
gleichkeyvault-
gefolgt vom Wert des Eingangsressourcennamens (vonmetadata.name
) ist. Im Beispiel YAML musssecretName
gleichkeyvault-<your Ingress name>
sein.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>
Erstellen Sie die Clusterressourcen mithilfe des Befehls
kubectl apply
.kubectl apply -f ingress.yaml -n hello-web-app-routing
In der folgenden Beispielausgabe sehen Sie die erstellten Ressourcen:
Ingress.networking.k8s.io/aks-helloworld created
Überprüfen, ob der verwaltete Eingang erstellt wurde
Überprüfen Sie mithilfe des Befehls kubectl get ingress
, ob der verwaltete Eingang erstellt wurde.
kubectl get ingress -n hello-web-app-routing
Die folgende Beispielausgabe zeigt den erstellten verwalteten Eingang:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld webapprouting.kubernetes.azure.com myapp.contoso.com 20.51.92.19 80, 443 4m
Nächste Schritte
Erfahren Sie mehr über die Überwachung der Metriken des nginx-Eingangsdatencontrollers, die im Anwendungsrouting-Add-On enthalten sind, mit Prometheus in Grafana beim Analysieren der Leistung und Nutzung Ihrer Anwendung.
Azure Kubernetes Service