Freigeben über


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:

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.

  1. 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>"
    
  2. 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.

  1. 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.

  1. 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)
    
  2. 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.

  1. 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
    
  2. 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 nur https://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 Abschnitt tls 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 von secretName gleich keyvault- gefolgt vom Wert des Eingangsressourcennamens (von metadata.name) ist. Im Beispiel YAML muss secretName gleich keyvault-<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>
    
  3. 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.