Freigeben über


Benutzerdefinierte Zertifizierungsstelle (ZS) in Azure Kubernetes Service (AKS) (Vorschau)

AKS generiert und verwendet die folgenden Zertifikate, Zertifizierungsstellen (ZS) und Dienstkonten (SA):

  • Der AKS-API-Server erstellt eine Zertifizierungsstelle, die als Cluster-ZS bezeichnet wird.
  • Der API-Server verfügt über eine Clusterzertifizierungsstelle, die Zertifikate für die unidirektionale Kommunikation vom API-Server zu kubelets signiert.
  • Jedes kubelet erstellt außerdem eine Zertifikatsignierungsanforderung (Certificate Signing Request, CSR), die von der Clusterzertifizierungsstelle signiert wird, für die Kommunikation vom kubelet zum API-Server.
  • Der API-Aggregator verwendet die Clusterzertifizierungsstelle zum Ausstellen von Zertifikaten für die Kommunikation mit anderen APIs. Der API-Aggregator kann auch über eine eigene Zertifizierungsstelle zum Ausstellen dieser Zertifikate verfügen, aber zurzeit verwendet er die Clusterzertifizierungsstelle.
  • Jeder Knoten verwendet ein SA-Token, das von der Cluster-ZS signiert wurde.
  • Der kubectl-Client verfügt über ein Zertifikat für die Kommunikation mit dem AKS-Cluster.

Darüber hinaus können Sie benutzerdefinierte Zertifizierungsstellen erstellen, die eine Vertrauensstellung zwischen Ihrem Azure Kubernetes Service-Cluster (AKS) und den Workloads wie privaten Registrierungen, Proxys und Firewalls einrichten. Ein Kubernetes-Geheimnis speichert die Informationen der Zertifizierungsstelle, und es wird dann an alle Knoten im Cluster übergeben. Dieses Feature wird pro Knotenpool angewendet, sodass Sie es für neue und vorhandene Knotenpools aktivieren müssen.

In diesem Artikel erfahren Sie, wie Sie benutzerdefinierte Zertifizierungsstellen erstellen und auf Ihre AKS-Cluster anwenden.

Voraussetzungen

  • Ein Azure-Abonnement. Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen.
  • Installation der Azure CLI (ab Version 2.43.0).
  • Eine Base64-codierte Zertifikatzeichenfolge oder Textdatei mit Zertifikat.

Einschränkungen

  • Dieses Feature wird derzeit für Windows-Knotenpools nicht unterstützt.

Installieren der Azure CLI-Erweiterung aks-preview

Wichtig

AKS-Previewfunktionen stehen gemäß dem Self-Service- und Aktivierungsprinzip zur Verfügung. Vorschauversionen werden „wie besehen“ und „wie verfügbar“ bereitgestellt und sind von Service Level Agreements und der Herstellergarantie ausgeschlossen. AKS-Vorschauversionen werden teilweise vom Kundensupport auf Grundlage der bestmöglichen Leistung abgedeckt. Daher sind diese Funktionen nicht für die Verwendung in der Produktion vorgesehen. Weitere Informationen finden Sie in den folgenden Supportartikeln:

  1. Installieren Sie die Erweiterung „aks-preview“ mithilfe des Befehls az extension add.

    az extension add --name aks-preview
    
  2. Führen Sie mit dem Befehl az extension update ein Update auf die neueste Version der Erweiterung aus.

    az extension update --name aks-preview
    

Registrieren des CustomCATrustPreview-Featureflags

  1. Registrieren Sie das Featureflag CustomCATrustPreview mithilfe des Befehls az feature register.

    az feature register --namespace "Microsoft.ContainerService" --name "CustomCATrustPreview"
    

    Es dauert einige Minuten, bis der Status Registered (Registriert) angezeigt wird.

  2. Überprüfen Sie den Registrierungsstatus mithilfe des Befehls az feature show.

    az feature show --namespace "Microsoft.ContainerService" --name "CustomCATrustPreview"
    
  3. Wenn der Zustand Registered (Registriert) lautet, aktualisieren Sie die Registrierung des Ressourcenanbieters Microsoft.ContainerService mithilfe des Befehls az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Benutzerdefinierte Zertifizierungsstelleninstallation in AKS-Knotenpools

Installieren von Zertifizierungsstellen in AKS-Knotenpools

  • Wenn es in Ihrer Umgebung erforderlich ist, dass Ihre benutzerdefinierten Zertifizierungsstellen für eine ordnungsgemäße Bereitstellung zum Vertrauensspeicher des Knotens hinzugefügt werden, müssen Sie in den Vorgängen az aks create oder az aks update eine Textdatei mit bis zu 10 durch Leerzeilen getrennten Zertifikaten übergeben. Beispieltextdatei:

    -----BEGIN CERTIFICATE-----
    cert1
    -----END CERTIFICATE-----
    
    -----BEGIN CERTIFICATE-----
    cert2
    -----END CERTIFICATE-----
    

Installieren von Zertifizierungsstellen während der Erstellung eines Knotenpools

  • Installieren Sie CAs während der Erstellung des Knotenpools mithilfe des az aks create Befehls, und geben Sie die Textdatei für den --custom-ca-trust-certificates Parameter an.

    az aks create \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --node-count 2 \
        --enable-custom-ca-trust \
        --custom-ca-trust-certificates pathToFileWithCAs \
        --generate-ssh-keys
    

Rotation der Zertifizierungsstelle für Verfügbarkeit während des Starts des Knotenpools

  • Aktualisieren Sie Zertifizierungsstellen, die während des Startvorgangs an Ihren Cluster übergeben werden, indem Sie den Befehl az aks update verwenden und Ihre Textdatei für den Parameter --custom-ca-trust-certificates angeben.

    az aks update \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --custom-ca-trust-certificates pathToFileWithCAs
    

    Hinweis

    Dieser Vorgang löst eine Modellaktualisierung aus, um sicherzustellen, dass neue Knoten über die neuesten Zertifizierungsstellen verfügen, die für die korrekte Bereitstellung erforderlich sind. AKS erstellt zusätzliche Knoten, leert vorhandene, löscht sie und ersetzt sie durch Knoten, in denen der neue Satz von Zertifizierungsstellen installiert ist.

Installieren von Zertifizierungsstellen nach der Erstellung eines Knotenpools

Wenn Ihre Umgebung ohne Ihre benutzerdefinierten Zertifizierungsstellen erfolgreich bereitgestellt werden kann, können Sie die Zertifizierungsstellen angeben, indem Sie im Namespace kube-system ein Geheimnis bereitstellen. Dieser Ansatz ermöglicht die Rotation von Zertifikaten, ohne dass Knoten erneut erstellt werden müssen.

  • Erstellen Sie ein geheimes YAML-Manifest zum Kubernetes-Geheimnis mit Ihrer base64-codierten Zertifikatszeichenfolge im data-Feld.

    apiVersion: v1
    kind: Secret
    metadata: 
        name: custom-ca-trust-secret
        namespace: kube-system
    type: Opaque
    data:
        ca1.crt: |
          {base64EncodedCertStringHere}
        ca2.crt: |
          {anotherBase64EncodedCertStringHere}
    

    Daten aus diesem Geheimnis werden verwendet, um ZSs auf allen Knoten zu aktualisieren. Stellen Sie sicher, dass das Geheimnis den Namen custom-ca-trust-secret hat und im Namespace kube-system erstellt wird. Die Installation von Zertifizierungsstellen unter Verwendung des Geheimnisses im Namespace kube-system ermöglicht eine Rotation von Zertifizierungsstellen, ohne dass Knoten neu erstellt werden müssen. Um eine Zertifizierungsstelle zu aktualisieren oder zu entfernen, können Sie das YAML-Manifest bearbeiten und anwenden. Der Cluster ruft Änderungen ab und aktualisiert die Knoten entsprechend. Es kann einige Minuten dauern, bevor Änderungen angewendet werden.

    Hinweis

    Der Neustart von „containerd“ kann auf dem Knoten erforderlich sein, damit die Zertifizierungsstellen ordnungsgemäß übernommen werden. Wenn es den Anschein hat, dass die Zertifizierungsstellen nicht ordnungsgemäß zum Vertrauensspeicher Ihres Knotens hinzugefügt wurden, können Sie einen Neustart mit dem folgenden Befehl über die Shell des Knotens auslösen:

    systemctl restart containerd

Konfigurieren eines neuen AKS-Clusters für die Verwendung einer benutzerdefinierten ZS

  • Konfigurieren Sie einen neuen AKS-Cluster für die Verwendung einer benutzerdefinierten Zertifizierungsstelle, indem Sie den Befehl az aks create mit dem Parameter --enable-custom-ca-trust verwenden.

    az aks create \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --node-count 2 \
        --enable-custom-ca-trust \
        --generate-ssh-keys
    

Konfigurieren eines neuen AKS-Clusters zur Verwendung einer benutzerdefinierten Zertifizierungsstelle für Zertifizierungsstellen, die vor dem Starten des Knotens installiert werden

  • Konfigurieren Sie einen neuen AKS-Cluster zur Verwendung einer benutzerdefinierten Zertifizierungsstelle für Zertifizierungsstellen, die vor dem Starten des Knotens installiert werden, indem Sie den Befehl az aks create mit den Parametern --enable-custom-ca-trust und --custom-ca-trust-certificates verwenden.

    az aks create \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --node-count 2 \
        --enable-custom-ca-trust \
        --custom-ca-trust-certificates pathToFileWithCAs \
        --generate-ssh-keys
    

Konfigurieren eines vorhandenen AKS-Clusters für die Installation benutzerdefinierter Zertifizierungsstellen vor dem Starten des Knotens

  • Konfigurieren Sie einen vorhandenen AKS-Cluster so, dass Ihre benutzerdefinierten Zertifizierungsstellen dem Vertrauensspeicher des Knotens hinzugefügt werden, ehe er gestartet wird, indem Sie den Befehl az aks update mit dem Parameter --custom-ca-trust-certificates verwenden.

    az aks update \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --custom-ca-trust-certificates pathToFileWithCAs
    

Konfigurieren eines neuen Knotenpools für die Verwendung einer benutzerdefinierten Zertifizierungsstelle

  • Konfigurieren Sie einen neuen Knotenpool für die Verwendung einer benutzerdefinierten Zertifizierungsstelle, indem Sie den Befehl az aks nodepool add mit dem Parameter --enable-custom-ca-trust verwenden.

    az aks nodepool add \
        --cluster-name <cluster-name> \
        --resource-group <resource-group-name> \
        --name <node-pool-name> \
        --enable-custom-ca-trust \
        --os-type Linux
    

    Wenn keine anderen Knotenpools mit dem aktiviertem Feature vorhanden sind, muss der Cluster seine Einstellungen abstimmen, damit die Änderungen wirksam werden. Dieser Vorgang erfolgt automatisch im Rahmen der Abstimmschleife von AKS. Vor dem Vorgang werden der Daemonsatz und die Pods nicht im Cluster angezeigt. Sie können mit dem Befehl az aks update einen sofortigen Abstimmvorgang auslösen. Der Daemonsatz und die Pods werden nach Abschluss der Aktualisierung angezeigt.

Konfigurieren eines vorhandenen Knotenpools für die Verwendung einer benutzerdefinierten Zertifizierungsstelle

  • Konfigurieren Sie einen vorhandenen Knotenpool für die Verwendung einer benutzerdefinierten Zertifizierungsstelle, indem Sie den Befehl az aks nodepool update mit dem Parameter --enable-custom-ca-trust verwenden.

    az aks nodepool update \
        --resource-group <resource-group-name> \
        --cluster-name <cluster-name> \
        --name <node-pool-name> \
        --enable-custom-ca-trust
    

    Wenn keine anderen Knotenpools mit dem aktiviertem Feature vorhanden sind, muss der Cluster seine Einstellungen abstimmen, damit die Änderungen wirksam werden. Dieser Vorgang erfolgt automatisch im Rahmen der Abstimmschleife von AKS. Vor dem Vorgang werden der Daemonsatz und die Pods nicht im Cluster angezeigt. Sie können mit dem Befehl az aks update einen sofortigen Abstimmvorgang auslösen. Der Daemonsatz und die Pods werden nach Abschluss der Aktualisierung angezeigt.

Deaktivieren einer benutzerdefinierten Zertifizierungsstelle in einem Knotenpool

  • Deaktivieren Sie das benutzerdefinierte Zertifizierungsstellenfeature in einem vorhandenen Knotenpool mithilfe des az aks nodepool update Befehls mit dem --disable-custom-ca-trust Parameter.

    az aks nodepool update \
        --resource-group <resource-group-name> \
        --cluster-name <cluster-name> \
        --name <node-pool-name> \
        --disable-custom-ca-trust
    

Problembehandlung

Das Feature ist aktiviert, und das Geheimnis mit Zertifizierungsstellen wurde hinzugefügt, aber die Vorgänge schlagen mit dem Fehler „X.509 Certificate Signed by Unknown Authority“ (Zertifikat wurde von unbekannter Autorität signiert) fehl

Falsch formatierte Zertifikate im Geheimnis übergeben

AKS verlangt, dass die im vom Benutzer erstellten Geheimnis übergebenen Zertifikate ordnungsgemäß formatiert und mit Base64 codiert sind. Stellen Sie sicher, dass die übergebenen Zertifizierungsstellen ordnungsgemäß mit Base64 codiert sind und dass Dateien mit Zertifizierungsstellen keine CRLF-Zeilenumbrüche aufweisen. Zertifikate, die an --custom-ca-trust-certificates übergeben werden, dürfen nicht mit Base64 codiert sein.

„containerd“ hat keine neuen Zertifikate übernommen

Führen Sie in der Shell des Knotens systemctl restart containerd aus. Sobald „containerd“ neu gestartet wurde, werden die neuen Zertifikate ordnungsgemäß von der Containerruntime übernommen.

Nächste Schritte

Weitere Informationen zu bewährte Methoden der AKS-Sicherheit finden Sie unter Bewährte Methoden für Cluster-Sicherheit und Upgrades in Azure Kubernetes Service (AKS).