Share via


Konfigurera grupphanterade tjänstkonton (gMSA) för Windows-containrar med Azure Kubernetes Service på Azure Stack HCI och Windows Server

Gäller för: AKS på Azure Stack HCI 22H2, AKS på Windows Server

Om du vill använda AD-autentisering kan du konfigurera grupphanterade tjänstkonton (gMSA) för Windows-containrar så att de körs med en värd som inte är domänansluten. Ett grupphanterat tjänstkonto är en särskild typ av tjänstkonto som introduceras i Windows Server 2012 som är utformat för att tillåta flera datorer att dela en identitet utan att känna till lösenordet. Windows-containrar kan inte vara domänanslutna, men många Windows-program som körs i Windows-containrar behöver fortfarande AD-autentisering.

Anteckning

Information om hur Kubernetes-communityn stöder användning av gMSA med Windows-containrar finns i Konfigurera gMSA.

Arkitektur för gMSA för containrar med en icke-domänansluten värd

gMSA för containrar med en icke-domänansluten värd använder en bärbar användaridentitet i stället för en värdidentitet för att hämta gMSA-autentiseringsuppgifter. Därför är det inte längre nödvändigt att manuellt ansluta Windows-arbetsnoder till en domän. Användaridentiteten sparas som en hemlighet i Kubernetes. Följande diagram visar processen för att konfigurera gMSA för containrar med en icke-domänansluten värd:

Diagram över grupphanterade tjänstkonton version två

gMSA för containrar med en icke-domänansluten värd ger flexibiliteten att skapa containrar med gMSA utan att ansluta värdnoden till domänen. Från och med Windows Server 2019 stöds ccg.exe, vilket gör att en plugin-mekanism kan hämta gMSA-autentiseringsuppgifter från Active Directory. Du kan använda den identiteten för att starta containern. Mer information om ccg.exe finns i ICcgDomainAuthCredentials-gränssnittet.

Jämförelse av gMSA för containrar med en icke-domänansluten värd och en domänansluten värd

När gMSA ursprungligen introducerades krävde det att containervärden var domänansluten, vilket skapade mycket merarbete för att ansluta Windows-arbetsnoder manuellt till en domän. Den här begränsningen åtgärdades med gMSA för containrar med en icke-domänansluten värd, så att användarna nu kan använda gMSA med domänosammanslutna värdar. Andra förbättringar av gMSA omfattar följande funktioner:

  • Eliminerar kravet på att manuellt ansluta Windows-arbetsnoder till en domän, vilket orsakade mycket merarbete. För skalningsscenarier förenklar detta processen.
  • I scenarier med löpande uppdateringar behöver användarna inte längre återansluta noden till en domän.
  • En enklare process för att hantera arbetsnodens datorkonton för att hämta gMSA-tjänstkontolösenord.
  • En mindre komplicerad process från slutpunkt till slutpunkt för att konfigurera gMSA med Kubernetes.

Innan du börjar

Om du vill köra en Windows-container med ett grupphanterat tjänstkonto behöver du följande krav:

  • En Active Directory-domän med minst en domänkontrollant som kör Windows Server 2012 eller senare. Det finns inga krav på skogs- eller domänfunktionsnivå för att använda gMSA, men endast domänkontrollanter som kör Windows Server 2012 eller senare kan distribuera gMSA-lösenord. Mer information finns i Active Directory-krav för gMSAs.
  • Behörighet att skapa ett gMSA-konto. Om du vill skapa ett gMSA-konto måste du vara domänadministratör eller använda ett konto som har behörighet att skapa msDS-GroupManagedServiceAccount-objekt .
  • Åtkomst till Internet för att ladda ned CredentialSpec PowerShell-modulen. Om du arbetar i en frånkopplad miljö kan du spara modulen på en dator med Internetåtkomst och kopiera den till utvecklingsdatorn eller containervärden.
  • För att säkerställa att gMSA- och AD-autentisering fungerar kontrollerar du att Azure Stack HCI- och Windows Server-klusternoderna är konfigurerade för att synkronisera sin tid med antingen en domänkontrollant eller annan tidskälla. Du bör också se till att Hyper-V är konfigurerat för att synkronisera tid till alla virtuella datorer.

Förbereda gMSA i domänkontrollanten

Följ dessa steg för att förbereda gMSA i domänkontrollanten:

  1. Förbered Active Directory på domänkontrollanten och skapa gMSA-kontot.

  2. Skapa ett domänanvändarkonto. Det här användarkontot/lösenordet sparas som en Kubernetes-hemlighet och används för att hämta gMSA-lösenordet.

  3. Om du vill skapa ett GMSA-konto och bevilja behörighet att läsa lösenordet för gMSA-kontot som skapades i steg 2 kör du följande PowerShell-kommando för New-ADServiceAccount :

     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> 
    

    För -PrincipalsAllowedToRetrieveManagedPasswordanger du det domänanvändarnamn som du skapade tidigare enligt följande exempel:

    New-ADServiceAccount -Name "WebApp01" -DnsHostName "WebApp01.akshcitest.com" -ServicePrincipalNames "host/WebApp01", "host/WebApp01.akshcitest.com" -PrincipalsAllowedToRetrieveManagedPassword "testgmsa"
    

Förbereda JSON-filen för gMSA-autentiseringsuppgifter

Om du vill förbereda JSON-filen för gMSA-autentiseringsuppgifter följer du stegen för att skapa en autentiseringsspecifikation.

Konfigurera gMSA för Windows-poddar och -containrar i klustret

Kubernetes-communityn stöder redan domänanslutna Windows-arbetsnoder för gMSA. Även om du inte behöver domänansluta en Windows-arbetsnod i AKS på Azure Stack HCI och Windows Server finns det andra konfigurationssteg som krävs. De här stegen omfattar installation av webhooken, anpassad resursdefinition (CRD) och autentiseringsspecifikationen samt aktivering av rollbaserad åtkomstkontroll (RBAC-roll). Följande steg använder PowerShell-kommandon som har skapats för att förenkla konfigurationsprocessen.

Innan du slutför följande steg kontrollerar du att AksHci PowerShell-modulen är installerad och kubectl kan ansluta till klustret.

  1. Installera webhooken genom att köra följande Install-AksHciGmsaWebhook PowerShell-kommando :

    Install-AksHciGMSAWebhook -Name <cluster name>
    

    Kontrollera att webhook-podden körs genom att köra följande kommando:

    kubectl get pods -n kube-system | findstr gmsa
    

    Du bör se en podd med prefixet gmsa-webhook som körs.

  2. Skapa det hemliga objektet som lagrar Active Directory-användarens autentiseringsuppgifter. Slutför följande konfigurationsdata och spara inställningarna i en fil med namnet 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>
    

    Kör sedan följande kommando för att skapa det hemliga objektet:

    kubectl apply -f secret.yaml
    

    Anteckning

    Om du skapar en hemlighet under ett annat namnområde än standardvärdet ska du komma ihåg att ange namnområdet för distributionen till samma namnområde.

  3. Använd PowerShell-cmdleten Add-AksHciGMSACredentialSpec för att skapa gMSA CRD, aktivera rollbaserad åtkomstkontroll (RBAC) och tilldela sedan rollen till tjänstkontona för att använda en specifik gMSA-specifikationsfil för autentiseringsuppgifter. De här stegen beskrivs mer detaljerat i den här Kubernetes-artikeln om att konfigurera gMSA för Windows-poddar och -containrar.

    Använd JSON-autentiseringsspecifikationen som indata för följande PowerShell-kommando (parametrar med asterisker * är obligatoriska):

    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 
    

    Om du vill visa ett exempel kan du se följande kod:

    Add-AksHciGMSACredentialSpec -Name mynewcluster 
      -credSpecFilePath .\credspectest.json 
      -credSpecName credspec-mynewcluster 
      -secretName mysecret 
      -clusterRoleName clusterrole-mynewcluster
    

Distribuera programmet

Skapa YAML-distributionsfilen med hjälp av följande exempelinställningar. De obligatoriska posterna är serviceAccountName, gmsaCredentialSpecName, volumeMountsoch dnsconfig.

  1. Lägg till tjänstkontot:

    serviceAccountName: default
       securityContext: 
         windowsOptions: 
           gmsaCredentialSpecName:
    
  2. Lägg till autentiseringsuppgiftsspecifikationsobjektet:

    securityContext: 
         windowsOptions: 
           gmsaCredentialSpecName: <cred spec name>
    
  3. Montera hemligheten för distributionen:

    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
    
  4. Lägg till IP-adressen för domänkontrollanten och domännamnet under dnsConfig:

    dnsConfig: 
         nameservers:
           - <IP address for domain controller>
         searches: 
           - <domain>
    

Kontrollera att containern fungerar med gMSA

När du har distribuerat containern använder du följande steg för att kontrollera att den fungerar:

  1. Hämta container-ID:t för distributionen genom att köra följande kommando:

    kubectl get pods
    
  2. Starta PowerShell och kör följande kommando:

    kubectl exec -it <container id> powershell
    
  3. När du är i containern kör du följande kommando:

    Nltest /parentdomain 
    Nltest /sc_verify:<domain> 
    
    Connection Status = 0 0x0 NERR_Success The command completed successfully. 
    

    Dessa utdata visar att datorn autentiserades av en domänkontrollant och att det finns en säker kanal mellan klientdatorn och domänkontrollanten.

  4. Kontrollera om containern kan hämta en giltig Biljettbeviljande biljett för Kerberos (TGT).

    klist get krbtgt
    
    A ticket to krbtgt has been retrieved successfully
    

Rensa gMSA-inställningar i klustret

Om du behöver rensa gMSA-inställningar använder du följande avinstallationssteg.

Avinstallera autentiseringsspecifikationen

Om du vill avinstallera kör du följande Remove-AksHcigmsaCredentialSpec PowerShell-kommando :

Remove-AksHciGMSACredentialSpec -Name <cluster name> -credSpecName <cred spec object name> -clusterRoleName <clusterrole object name> -serviceAccount <serviceaccount object name> -secretNamespace <namespace of the secret object>

Avinstallera webhook

Om du vill avinstallera webhooken kör du följande PowerShell-kommando uninstall-AksHciGMSAWebhook :

Uninstall-AksHciGMSAWebhook -Name <cluster name>

Nästa steg