Beheerde serviceaccounts (gMSA) voor Windows-containers configureren met Azure Kubernetes Service in Azure Local en Windows Server
Van toepassing op: AKS in Azure Local 22H2, AKS op Windows Server
Als u AD-verificatie wilt gebruiken, kunt u beheerde serviceaccounts (gMSA) voor Windows-containers configureren voor uitvoering met een host die niet aan een domein is toegevoegd. Een beheerd serviceaccount voor groepen is een speciaal type serviceaccount dat is geïntroduceerd in Windows Server 2012, dat is ontworpen om meerdere computers toe te staan een identiteit te delen zonder het wachtwoord te kennen. Windows-containers kunnen niet aan een domein worden toegevoegd, maar veel Windows-toepassingen die worden uitgevoerd in Windows-containers hebben nog steeds AD-verificatie nodig.
Notitie
Zie GMSA configureren voor meer informatie over hoe de Kubernetes-community het gebruik van gMSA met Windows-containers ondersteunt.
Architectuur van gMSA voor containers met een host die geen lid is van een domein
gMSA voor containers met een niet-domein gekoppelde host maakt gebruik van een draagbare gebruikersidentiteit in plaats van een host-id om gMSA-referenties op te halen. Daarom is het handmatig koppelen van Windows-werkknooppunten aan een domein niet meer nodig. De gebruikersidentiteit wordt opgeslagen als een geheim in Kubernetes. In het volgende diagram ziet u het proces voor het configureren van gMSA voor containers met een host die geen lid is van een domein:
gMSA voor containers met een niet-domein gekoppelde host biedt de flexibiliteit van het maken van containers met gMSA zonder dat het hostknooppunt aan het domein wordt toegevoegd. Vanaf Windows Server 2019 wordt ccg.exe ondersteund, waardoor een invoegtoepassingsmechanisme gMSA-referenties kan ophalen uit Active Directory. U kunt die identiteit gebruiken om de container te starten. Zie de interface ICcgDomainAuthCredentials voor meer informatie over ccg.exe.
Vergelijking van gMSA voor containers met een host die niet lid is van een domein en een host die lid is van een domein
Toen gMSA in eerste instantie werd geïntroduceerd, moest de containerhost lid zijn van een domein, waardoor veel overhead werd gecreëerd om Windows-werkknooppunten handmatig aan een domein toe te voegen. Deze beperking is verholpen met gMSA voor containers met een host die niet aan een domein is toegevoegd, zodat gebruikers nu gMSA kunnen gebruiken met niet-gekoppelde hosts zonder domein. Andere verbeteringen in gMSA omvatten de volgende functies:
- Het elimineren van de vereiste om Windows-werkknooppunten handmatig aan een domein toe te voegen, wat veel overhead veroorzaakte. Voor schaalscenario's vereenvoudigt dit het proces.
- In scenario's voor rolling updates hoeven gebruikers het knooppunt niet meer opnieuw aan een domein te koppelen.
- Een eenvoudiger proces voor het beheren van de werkknooppuntcomputeraccounts om wachtwoorden voor gMSA-serviceaccounts op te halen.
- Een minder gecompliceerd end-to-end proces voor het configureren van gMSA met Kubernetes.
Voordat u begint
Als u een Windows-container wilt uitvoeren met een door een groep beheerd serviceaccount, hebt u de volgende vereisten nodig:
- Een Active Directory-domein met ten minste één domeincontroller met Windows Server 2012 of hoger. Er zijn geen vereisten op forest- of domeinfunctionaliteitsniveau voor het gebruik van gMSA's, maar alleen domeincontrollers met Windows Server 2012 of hoger kunnen gMSA-wachtwoorden distribueren. Zie Active Directory-vereisten voor gMSA's voor meer informatie.
- Machtiging voor het maken van een gMSA-account. Als u een gMSA-account wilt maken, moet u een domeinbeheerder zijn of een account gebruiken met machtigingen voor het maken van msDS-GroupManagedServiceAccount-objecten .
- Toegang tot internet om de CredentialSpec PowerShell-module te downloaden. Als u in een niet-verbonden omgeving werkt, kunt u de module opslaan op een computer met internettoegang en deze kopiëren naar uw ontwikkelcomputer of containerhost.
- Om ervoor te zorgen dat gMSA- en AD-verificatie werken, moet u ervoor zorgen dat de lokale azure- en Windows Server-clusterknooppunten zijn geconfigureerd om hun tijd te synchroniseren met een domeincontroller of een andere tijdbron. Zorg er ook voor dat Hyper-V is geconfigureerd om tijd te synchroniseren met virtuele machines.
De gMSA voorbereiden op de domeincontroller
Volg deze stappen om de gMSA voor te bereiden op de domeincontroller:
Bereid Active Directory voor op de domeincontroller en maak het gMSA-account.
Maak een domeingebruikersaccount. Deze gebruikersaccount-/wachtwoordreferenties worden opgeslagen als een Kubernetes-geheim en worden gebruikt om het gMSA-wachtwoord op te halen.
Als u een GMSA-account wilt maken en toestemming wilt verlenen om het wachtwoord voor het gMSA-account te lezen dat in stap 2 is gemaakt, voert u de volgende PowerShell-opdracht New-ADServiceAccount uit:
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>
-PrincipalsAllowedToRetrieveManagedPassword
Geef voor het domein de gebruikersnaam op die u eerder hebt gemaakt, zoals wordt weergegeven in het volgende voorbeeld:New-ADServiceAccount -Name "WebApp01" -DnsHostName "WebApp01.akshcitest.com" -ServicePrincipalNames "host/WebApp01", "host/WebApp01.akshcitest.com" -PrincipalsAllowedToRetrieveManagedPassword "testgmsa"
Het JSON-bestand gMSA-referentiespecificatie voorbereiden
Volg de stappen voor het maken van een referentiespecificatie om het JSON-bestand gMSA-referentiespecificatie voor te bereiden.
gMSA configureren voor Windows-pods en -containers in het cluster
De Kubernetes-community biedt al ondersteuning voor Windows-werkknooppunten die lid zijn van een domein voor gMSA. Hoewel u geen domein hoeft toe te voegen aan een Windows-werkknooppunt in AKS in Azure Local en Windows Server, zijn er andere vereiste configuratiestappen. Deze stappen omvatten het installeren van de webhook, de aangepaste resourcedefinitie (CRD) en de referentiespecificatie en het inschakelen van op rollen gebaseerd toegangsbeheer (RBAC-rol). In de volgende stappen worden PowerShell-opdrachten gebruikt die zijn gebouwd om het configuratieproces te vereenvoudigen.
Voordat u de volgende stappen uitvoert, moet u ervoor zorgen dat de AksHci PowerShell-module is geïnstalleerd en kubectl
verbinding kan maken met uw cluster.
Als u de webhook wilt installeren, voert u de volgende PowerShell-opdracht Install-AksHciGmsaWebhook uit:
Install-AksHciGMSAWebhook -Name <cluster name>
Voer de volgende opdracht uit om te controleren of de webhookpod is uitgevoerd:
kubectl get pods -n kube-system | findstr gmsa
U ziet één pod met het voorvoegsel gmsa-webhook dat wordt uitgevoerd.
Maak het geheime object waarin de Active Directory-gebruikersreferenties worden opgeslagen. Voltooi de volgende configuratiegegevens en sla de instellingen op in een bestand met de naam 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>
Voer vervolgens de volgende opdracht uit om het geheime object te maken:
kubectl apply -f secret.yaml
Notitie
Als u een geheim maakt onder een andere naamruimte dan de standaardnaamruimte, moet u de naamruimte van de implementatie instellen op dezelfde naamruimte.
Gebruik de cmdlet Add-AksHciGMSACredentialSpecSpec PowerShell om de gMSA CRD te maken, op rollen gebaseerd toegangsbeheer (RBAC) in te schakelen en vervolgens de rol toe te wijzen aan de serviceaccounts om een specifiek gMSA-referentiespecificatiebestand te gebruiken. Deze stappen worden uitgebreid beschreven in dit Kubernetes-artikel over gMSA configureren voor Windows-pods en -containers.
Gebruik de JSON-referentiespecificatie als invoer voor de volgende PowerShell-opdracht (parameters met sterretjes * zijn verplicht):
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>* -overwrite
Als u een voorbeeld wilt weergeven, raadpleegt u de volgende code:
Add-AksHciGMSACredentialSpec -Name mynewcluster -credSpecFilePath .\credspectest.json -credSpecName credspec-mynewcluster -secretName mysecret -clusterRoleName clusterrole-mynewcluster
De toepassing implementeren
Maak het YAML-implementatiebestand met behulp van de volgende voorbeeldinstellingen. De vereiste vermeldingen bevattenserviceAccountName
, gmsaCredentialSpecName
, en volumeMounts
dnsconfig
.
Voeg het serviceaccount toe:
serviceAccountName: default securityContext: windowsOptions: gmsaCredentialSpecName:
Voeg het referentiespecificatieobject toe:
securityContext: windowsOptions: gmsaCredentialSpecName: <cred spec name>
Koppel het geheim voor de implementatie:
volumeMounts: - name: <volume name> mountPath: <vmount path> readOnly: true volumes: - name: <volume name> secret: secretName: <secret name> items: - key: username path: my-group/my-username
Voeg het IP-adres van de domeincontroller en domeinnaam toe onder dnsConfig:
dnsConfig: nameservers: - <IP address for domain controller> searches: - <domain>
Controleren of de container werkt met gMSA
Nadat u de container hebt geïmplementeerd, gebruikt u de volgende stappen om te controleren of deze werkt:
Haal de container-id voor uw implementatie op door de volgende opdracht uit te voeren:
kubectl get pods
Open PowerShell en voer de volgende opdracht uit:
kubectl exec -it <container id> powershell
Wanneer u zich in de container bevindt, voert u de volgende opdracht uit:
Nltest /parentdomain Nltest /sc_verify:<domain>
Connection Status = 0 0x0 NERR_Success The command completed successfully.
Deze uitvoer laat zien dat de computer is geverifieerd door een domeincontroller en dat er een beveiligd kanaal bestaat tussen de clientcomputer en de domeincontroller.
Controleer of de container een geldig Kerberos Ticket Granting Ticket (TGT) kan verkrijgen.
klist get krbtgt
A ticket to krbtgt has been retrieved successfully
GMSA-instellingen in het cluster opschonen
Als u gMSA-instellingen wilt opschonen, gebruikt u de volgende verwijderingsstappen.
De referentiespecificatie verwijderen
Als u wilt verwijderen, voert u de volgende opdracht Remove-AksHcigmsaCredentialSpec PowerShell uit:
Remove-AksHciGMSACredentialSpec -Name <cluster name> -credSpecName <cred spec object name> -clusterRoleName <clusterrole object name> -serviceAccount <serviceaccount object name> -secretNamespace <namespace of the secret object>
Webhook verwijderen
Als u de webhook wilt verwijderen, voert u de volgende PowerShell-opdracht Uninstall-AksHciGMSAWebhook uit:
Uninstall-AksHciGMSAWebhook -Name <cluster name>