Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: AKS unter Windows Server
Zur Verwendung der AD-Authentifizierung können Sie gruppenverwaltete Dienstkonten (group Managed Service Accounts, gMSA) für Windows-Container so konfigurieren, dass sie mit einem nicht in eine Domäne eingebundenen Host ausgeführt werden. Ein gruppenverwaltetes Dienstkonto ist eine besondere Art von Dienstkonto. Es wurde mit Windows Server 2012 eingeführt, um mehreren Computern zu ermöglichen, eine Identität gemeinsam zu nutzen, ohne das Passwort zu kennen. Windows-Container können nicht in die Domäne eingebunden werden, aber viele Windows-Anwendungen, die in Windows-Containern ausgeführt werden, benötigen weiterhin AD-Authentifizierung.
Hinweis
Erfahren Sie hier, wie die Kubernetes-Community die Verwendung von gMSA mit Windows-Containern unterstützt: Konfigurieren von gMSA.
Die Architektur von gMSA für Container mit einem nicht in eine Domäne eingebundenen Host
gMSA für Container mit einem nicht in eine Domäne eingebundenen Host verwendet eine portable Benutzeridentität anstelle einer Hostidentität, um gMSA-Anmeldeinformationen abzurufen. Daher müssen Sie Windows-Workerknoten nicht manuell mit einer Domäne verbinden. Die Benutzeridentität wird als Geheimnis in Kubernetes gespeichert. Das folgende Diagramm zeigt den Prozess zur Konfiguration von gMSA für Container mit einem nicht domänenverbundenen Host:
gMSA für Container mit einem nicht in eine Domäne eingebundenen Host bietet die Flexibilität, Container mit gMSA zu erstellen, ohne den Hostknoten in eine Domäne einzubinden. Ab Windows Server 2019 wird ccg.exe unterstützt, das einen Plug-in-Mechanismus zum Abrufen von gMSA-Anmeldeinformationen aus Active Directory ermöglicht. Sie können diese Identität verwenden, um den Container zu starten. Weitere Informationen zu ccg.exe finden Sie in der ICcgDomainAuthCredentials-Schnittstelle.
Der Vergleich von gMSA für Container mit einem nicht in eine Domäne eingebundenen Host und einem in eine Domäne eingebundenen Host
Als gMSA ursprünglich eingeführt wurde, musste der Containerhost in eine Domäne eingebunden sein. Das manuelle Einbinden von Windows-Workerknoten in eine Domäne führte zu einem erheblichen Mehraufwand. Diese Einschränkung wurde mit gMSA für Container mit einem nicht domänenverbundenen Host behoben, sodass Sie jetzt gMSA mit nicht verbundenen Hosts verwenden können. Weitere Verbesserungen an gMSA umfassen die folgenden Funktionen:
- Die Notwendigkeit, Windows-Workerknoten manuell mit einer Domäne zu verbinden, wird beseitigt. Bei Skalierungsszenarien hilft diese Vereinfachung.
- In Rolling-Update-Szenarien müssen Sie den Knoten nicht mehr erneut mit der Domäne verbinden.
- Ein einfacheres Verfahren zum Verwalten von Workerknoten-Computerkonten für den Abruf von gMSA-Dienstkontokennwörtern.
- Ein weniger komplizierter End-to-End-Prozess zum Konfigurieren von gMSA mit Kubernetes.
Voraussetzungen
Um einen Windows-Container mit einem gruppenverwalteten Dienstkonto zu betreiben, benötigen Sie die folgenden Voraussetzungen:
- Eine Active Directory-Domäne mit mindestens einem Domänencontroller mit Windows Server 2012 oder höher. Für die Verwendung von gMSAs gibt es keine Anforderungen auf Gesamtstruktur- oder Domänenfunktionsebene, aber nur Domänencontroller mit Windows Server 2012 oder höher können gMSA-Passwörter verteilen. Weitere Informationen finden Sie unter Active Directory-Anforderungen für gMSAs.
- Berechtigung zum Erstellen eines gMSA-Kontos. Um ein gMSA-Konto zu erstellen, müssen Sie ein Domänenadministrator sein oder ein Konto verwenden, das die Berechtigung hat, msDS-GroupManagedServiceAccount -Objekte zu erstellen.
- Greifen Sie auf das Internet zu, um das CredentialSpec-PowerShell-Modul herunterzuladen. Wenn Sie in einer nicht verbundenen Umgebung arbeiten, können Sie das Modul auf einem Computer mit Internetzugang speichern und es auf Ihren Entwicklungscomputer oder Containerhost kopieren.
- Damit gMSA und die AD-Authentifizierung funktionieren, stellen Sie sicher, dass die Windows Server-Cluster-Knoten so konfiguriert sind, dass sie ihre Zeit entweder mit einem Domänencontroller oder einer anderen Zeitquelle synchronisieren. Sie sollten außerdem sicherstellen, dass Hyper-V so konfiguriert ist, dass die Zeit mit allen virtuellen Computern synchronisiert wird.
Vorbereiten des gMSA auf dem Domänencontroller
Führen Sie die folgenden Schritte aus, um die gMSA auf dem Domänencontroller vorzubereiten:
Bereiten Sie auf dem Domänencontroller Active Directory vor, und erstellen Sie das gMSA-Konto.
Erstellen Sie ein Domänenbenutzerkonto. Speichern Sie dieses Benutzerkonto und die Kennwortanmeldeinformationen als Kubernetes-Schlüssel. Verwenden Sie diese Anmeldeinformationen, um das gMSA-Kennwort abzurufen.
Um ein gMSA-Konto zu erstellen und die Berechtigung zum Lesen des Kennworts für das in Schritt 2 erstellte gMSA-Konto zu erteilen, führen Sie den folgenden New-ADServiceAccount PowerShell-Befehl aus:
New-ADServiceAccount -Name "<gmsa account name>" -DnsHostName "<gmsa account name>.<domain name>.com" -ServicePrincipalNames "host/<gmsa account name>", "host/<gmsa account name>.<domain name>.com" -PrincipalsAllowedToRetrieveManagedPassword <username you created earlier>Geben Sie für
-PrincipalsAllowedToRetrieveManagedPasswordden Domänenbenutzernamen an, den Sie zuvor erstellt haben, wie im folgenden Beispiel gezeigt:New-ADServiceAccount -Name "WebApp01" -DnsHostName "WebApp01.akshcitest.com" -ServicePrincipalNames "host/WebApp01", "host/WebApp01.akshcitest.com" -PrincipalsAllowedToRetrieveManagedPassword "testgmsa"
Vorbereiten der JSON-Datei mit der gMSA-Anmeldeinformationsspezifikation
Führen Sie zum Vorbereiten der JSON-Datei mit der gMSA Anmeldeinformationsspezifikation die Schritte zum Erstellen einer Anmeldeinformationsspezifikation aus.
Konfigurieren von gMSA für Windows-Pods und -Container im Cluster
Die Kubernetes-Community unterstützt bereits in eine Domäne eingebundene Windows-Workerknoten für gMSA. Obwohl Sie keinen Domänenbeitritt zu einem Windows-Workerknoten in AKS unter Windows Server durchführen müssen, müssen Sie weitere Konfigurationsschritte ausführen. Diese Schritte umfassen die Installation des Webhooks, der benutzerdefinierten Ressourcendefinition (CRD) und der Anmeldeinformationen sowie die Aktivierung der rollenbasierten Zugriffskontrolle (RBAC-Rolle). Die folgenden Schritte verwenden PowerShell-Befehle, die den Konfigurationsprozess vereinfachen.
Bevor Sie die folgenden Schritte ausführen, stellen Sie sicher, dass Sie das AksHci PowerShell-Modul installieren und kubectl eine Verbindung mit Ihrem Cluster herstellen können.
Führen Sie zum Installieren des Webhooks den folgenden Install-AksHcigMSAWebhook-PowerShell-Befehl aus:
Install-AksHciGMSAWebhook -Name <cluster name>Führen Sie den folgenden Befehl aus, um zu bestätigen, dass der Webhook-Pod läuft.
kubectl get pods -n kube-system | findstr gmsaEs sollte ein Pod mit dem Präfix gMSA-Webhook angezeigt werden, der ausgeführt wird.
Erstellen Sie das geheime Objekt, in dem die Anmeldeinformationen des Active Directory-Benutzers gespeichert sind. Füllen Sie die folgenden Konfigurationsdaten aus und speichern Sie die Einstellungen in einer Datei namens secret.yaml.
apiVersion: v1 kind: Secret metadata: name: <secret-name> namespace: <secret under namespace other than the default> type: Opaque stringData: domain: <FQDN of the domain, for example: akshcitest.com> username: <domain user who can retrieve the gMSA password> password: <password>Führen Sie dann den folgenden Befehl aus, um das Geheimnisobjekt zu erstellen:
kubectl apply -f secret.yamlHinweis
Wenn Sie ein Geheimnis unter einem anderen Namespace als dem Standardnamespace erstellen, denken Sie daran, den Namespace der Bereitstellung auf denselben Namespace festzulegen.
Verwenden Sie das PowerShell-Cmdlet Add-AksHciGMSACredentialSpec , um die gMSA CRD zu erstellen, die rollenbasierte Zugriffskontrolle (RBAC) zu aktivieren und dann den Dienstkonten die Rolle zuzuweisen, eine bestimmte gMSA Credential Spec-Datei zu verwenden. Diese Schritte werden in diesem Kubernetes-Artikel zum Konfigurieren von gMSA für Windows-Pods und -Containerausführlicher beschrieben.
Verwenden Sie die JSON-Anmeldeinformationsspezifikation als Eingabe für den folgenden PowerShell-Befehl (Parameter mit Sternchen * sind obligatorisch):
Add-AksHciGMSACredentialSpec -Name <cluster name>* -credSpecFilePath <path to JSON credspec>* -credSpecName <name for credspec as the k8s GMSACredentialSpec object>* -secretName <name of secret>* -secretNamespace <namespace of secret> -serviceAccount <name of service account to bind to clusterrole> -clusterRoleName <name of clusterrole to use the credspec>* -overwriteUm ein Beispiel zu sehen, sehen Sie den folgenden Code:
Add-AksHciGMSACredentialSpec -Name mynewcluster -credSpecFilePath .\credspectest.json -credSpecName credspec-mynewcluster -secretName mysecret -clusterRoleName clusterrole-mynewcluster
Bereitstellen der Anwendung
Erstellen Sie die YAML-Bereitstellungsdatei mithilfe der folgenden Beispieleinstellungen. Zu den erforderlichen Einträgen gehören serviceAccountName, gmsaCredentialSpecName, volumeMounts und dnsconfig.
Fügen Sie das Dienstkonto hinzu:
serviceAccountName: default securityContext: windowsOptions: gmsaCredentialSpecName:Fügen Sie das Objekt für die Anmeldeinformationsspezifikation für hinzu:
securityContext: windowsOptions: gmsaCredentialSpecName: <cred spec name>Binden Sie das Geheimnis für die Bereitstellung ein:
volumeMounts: - name: <volume name> mountPath: <vmount path> readOnly: true volumes: - name: <volume name> secret: secretName: <secret name> items: - key: username path: my-group/my-usernameFügen Sie die IP-Adresse des Domänencontrollers und den Domänennamen unter „dnsConfig“ hinzu:
dnsConfig: nameservers: - <IP address for domain controller> searches: - <domain>
Überprüfen Sie, ob der Container mit gMSA funktioniert
Nachdem Sie den Container bereitgestellt haben, überprüfen Sie anhand der folgenden Schritte, ob er funktioniert:
Führen Sie den folgenden Befehl aus, um die Container-ID für Ihre Bereitstellung abzurufen:
kubectl get podsÖffnen Sie PowerShell und führen Sie den folgenden Befehl aus:
kubectl exec -it <container id> powershellSobald Sie sich im Container befinden, führen Sie den folgenden Befehl aus:
Nltest /parentdomain Nltest /sc_verify:<domain>Connection Status = 0 0x0 NERR_Success The command completed successfully.Diese Ausgabe zeigt, dass der Computer von einem Domänencontroller authentifiziert wurde und ein sicherer Kanal zwischen dem Client-Computer und dem Domänencontroller besteht.
Überprüfen Sie, ob der Container ein gültiges Kerberos-Ticket-Granting Ticket (TGT) abrufen kann.
klist get krbtgtA ticket to krbtgt has been retrieved successfully
Bereinigen von gMSA-Einstellungen im Cluster
Wenn Sie die gMSA-Einstellungen bereinigen müssen, nutzen Sie die folgenden Deinstallation-Schritte.
Deinstallieren der Anmeldeinformationsspezifikation
Führen Sie zum Deinstallieren den folgenden Remove-AksHcigMSACredentialSpec-PowerShell-Befehl aus:
Remove-AksHciGMSACredentialSpec -Name <cluster name> -credSpecName <cred spec object name> -clusterRoleName <clusterrole object name> -serviceAccount <serviceaccount object name> -secretNamespace <namespace of the secret object>
Deinstallieren des Webhooks
Führen Sie zum Deinstallieren des Webhooks den folgenden Uninstall-AksHcigMSAWebhook-PowerShell-Befehl aus:
Uninstall-AksHciGMSAWebhook -Name <cluster name>