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:
Installieren Sie die Erweiterung „aks-preview“ mithilfe des Befehls
az extension add
.az extension add --name aks-preview
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
Registrieren Sie das Featureflag
CustomCATrustPreview
mithilfe des Befehlsaz feature register
.az feature register --namespace "Microsoft.ContainerService" --name "CustomCATrustPreview"
Es dauert einige Minuten, bis der Status Registered (Registriert) angezeigt wird.
Überprüfen Sie den Registrierungsstatus mithilfe des Befehls
az feature show
.az feature show --namespace "Microsoft.ContainerService" --name "CustomCATrustPreview"
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
oderaz 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 Namespacekube-system
erstellt wird. Die Installation von Zertifizierungsstellen unter Verwendung des Geheimnisses im Namespacekube-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).
Azure Kubernetes Service