Dela via


Pull-tjänst för önskad tillståndskonfiguration

Viktigt!

Pull-servern (Windows Feature DSC-Service) är en komponent som stöds av Windows Server, men det finns inga planer på att erbjuda nya funktioner. Vi vill att du ska veta att en nyare version av DSC nu är allmänt tillgänglig, som hanteras av en funktion i Azure Policy med namnet gästkonfiguration. Gästkonfigurationstjänsten kombinerar funktioner i DSC-tillägget, Azure Automation State Configuration och de vanligaste funktionerna från kundfeedback. Gästkonfigurationen omfattar även stöd för hybriddatorer via Arc-aktiverade servrar.

Lokal Configuration Manager (LCM) kan hanteras centralt av en pull-tjänstlösning. När du använder den här metoden registreras noden som hanteras med en tjänst och tilldelas en konfiguration i LCM-inställningarna. Konfigurationen och alla DSC-resurser som behövs som beroenden för konfigurationen laddas ned till datorn och används av LCM för att hantera konfigurationen. Information om tillståndet för den dator som hanteras laddas upp till tjänsten för rapportering. Det här konceptet kallas för "pull-tjänst".

De aktuella alternativen för pull-tjänsten är:

  • Azure 自動化 tjänst för konfiguration av önskat tillstånd
  • En pull-tjänst som körs på Windows Server
  • Community-underhållna lösningar med öppen källkod
  • En SMB-resurs

Den rekommenderade skalan för varje lösning är följande:

Lösning Klient noder
Windows Pull Server med MDB/ESENT-databas Upp till 500 noder
Windows Pull Server med hjälp av SQL-databas Upp till 3500 noder
Azure Automation DSC Både små och stora miljöer

Den rekommenderade lösningen, och alternativet med de flesta tillgängliga funktionerna, är Azure Automation DSC. En övre gräns för antalet noder per Automation-konto har inte identifierats.

Azure-tjänsten kan hantera noder lokalt i privata datacenter eller i offentliga moln som Azure och AWS. För privata miljöer där servrar inte kan ansluta direkt till Internet bör du överväga att begränsa utgående trafik till endast det publicerade Azure IP-intervallet (se Azure IP-intervall och tjänsttaggar).

Funktioner i onlinetjänsten som för närvarande inte är tillgängliga i pull-tjänsten på Windows Server är:

  • Alla data krypteras under överföring och i vila
  • Klientcertifikat skapas och hanteras automatiskt
  • Hemlighetslager för central hantering av lösenord/autentiseringsuppgifter eller variabler som servernamn eller anslutningssträngar
  • Hantera nodens LCM-konfiguration centralt
  • Tilldela konfigurationer till klientnoder centralt
  • Släpp konfigurationsändringar till "kanariegrupper" för testning innan de når produktion
  • Grafisk rapportering
    • Statusinformation på DSC-resursnivå för kornighet
    • Utförliga felmeddelanden från klientdatorer för felsökning
  • Integrering med Azure Log Analytics för aviseringar, automatiserade uppgifter, Android/iOS-app för rapportering och aviseringar

DSC-pull-tjänst i Windows Server

Det går att konfigurera en pull-tjänst så att den körs på Windows Server. Observera att pull-tjänstlösningen som ingår i Windows Server endast innehåller funktioner för att lagra konfigurationer och moduler för att ladda ned och samla in rapportdata i en databas. Den innehåller inte många av de funktioner som erbjuds av tjänsten i Azure och är därför inte ett bra verktyg för att utvärdera hur tjänsten skulle användas.

Pull-tjänsten som erbjuds i Windows Server är en webbtjänst i IIS som använder ett OData-gränssnitt för att göra DSC-konfigurationsfiler tillgängliga för målnoder när noderna ber om dem.

Krav för att använda en pull-server:

  • En server som kör:
    • WMF/PowerShell 4.0 eller senare
    • Roll för IIS-server
    • DSC-tjänst
  • Vi rekommenderar att du genererar ett certifikat för att skydda autentiseringsuppgifter som skickas till den lokala Configuration Manager (LCM) på målnoder

Det bästa sättet att konfigurera Windows Server som värd för pull-tjänsten är att använda en DSC-konfiguration. Ett exempelskript finns nedan.

Databassystem som stöds

Från och med version 17090 av Windows Server innehåller WMF 5.1 stöd för SQL Server-alternativet för Pull Service (Windows Feature DSC-Service). Detta ger ett nytt alternativ för skalning av stora DSC-miljöer som inte har migrerats till Azure Automation DSC.

Om du vill konfigurera pull-servern så att den använder SQL Server anger du SqlProvider till $true och SqlConnectionString till en giltig SQL Server anslutningssträng. Mer information finns i SqlClient-anslutningssträngar. Ett exempel på SQL Server konfiguration med xDscWebService finns i Använda resursen xDscWebService och sedan granska 2-xDscWebService_RegistrationUseSQLProvider_Config.ps1 på GitHub.

Använda resursen xDscWebService

Det enklaste sättet att konfigurera en webbhämtningsserver är att använda resursen xDscWebService , som ingår i modulen xPSDesiredStateConfiguration . Följande steg beskriver hur du använder resursen i en Configuration som konfigurerar webbtjänsten.

  1. Anropa cmdleten Install-Module för att installera modulen xPSDesiredStateConfiguration.

  2. Hämta ett SSL-certifikat för DSC-pull-servern från en betrodd certifikatutfärdare, antingen inom din organisation eller en offentlig myndighet. Certifikatet som tas emot från myndigheten är vanligtvis i PFX-format.

  3. Installera certifikatet på noden som ska bli DSC Pull-servern på standardplatsen, som ska vara CERT:\LocalMachine\My. Anteckna certifikatets tumavtryck.

  4. Välj ett GUID som ska användas som registreringsnyckel. Om du vill generera en med PowerShell anger du följande i PS-prompten och trycker på Retur: [guid]::newGuid() eller New-Guid. Den här nyckeln används av klientnoder som en delad nyckel för att autentisera under registreringen. Mer information finns i avsnittet Registreringsnyckel nedan.

  5. I PowerShell ISE startar du (F5) följande konfigurationsskript (ingår i mappen i xPSDesiredStateConfiguration-modulen som Sample_xDscWebServiceRegistration.ps1.

    Det här skriptet konfigurerar pull-servern.

    configuration Sample_xDscWebServiceRegistration
    {
        param
        (
            [string[]]$NodeName = 'localhost',
    
            [ValidateNotNullOrEmpty()]
            [string] $certificateThumbPrint,
    
            [Parameter(HelpMessage='This should be a string with enough entropy (randomness)' +
                ' to protect the registration of clients to the pull server.  We will use new' +
                ' GUID by default.'
            )]
            [ValidateNotNullOrEmpty()]
            [string] $RegistrationKey   # A guid that clients use to initiate conversation with pull server
        )
    
        Import-DSCResource -ModuleName PSDesiredStateConfiguration
        Import-DSCResource -ModuleName xPSDesiredStateConfiguration
    
        Node $NodeName
        {
            WindowsFeature DSCServiceFeature
            {
                Ensure = "Present"
                Name   = "DSC-Service"
            }
    
            xDscWebService PSDSCPullServer
            {
                Ensure                  = "Present"
                EndpointName            = "PSDSCPullServer"
                Port                    = 8080
                PhysicalPath            = "$env:SystemDrive\inetpub\PSDSCPullServer"
                CertificateThumbPrint   = $certificateThumbPrint
                ModulePath              = "$env:PROGRAMFILES\WindowsPowerShell\DscService\Modules"
                ConfigurationPath       = "$env:PROGRAMFILES\WindowsPowerShell\DscService\Configuration"
                State                   = "Started"
                DependsOn               = "[WindowsFeature]DSCServiceFeature"
                RegistrationKeyPath     = "$env:PROGRAMFILES\WindowsPowerShell\DscService"
                AcceptSelfSignedCertificates = $true
                UseSecurityBestPractices     = $true
                Enable32BitAppOnWin64   = $false
            }
    
            File RegistrationKeyFile
            {
                Ensure          = 'Present'
                Type            = 'File'
                DestinationPath = "$env:ProgramFiles\WindowsPowerShell\DscService\RegistrationKeys.txt"
                Contents        = $RegistrationKey
            }
        }
    }
    
  6. Kör konfigurationen och skicka tumavtrycket för SSL-certifikatet som parametern certificateThumbPrint och en GUID-registreringsnyckel som parametern RegistrationKey :

    # To find the Thumbprint for an installed SSL certificate for use with the pull server list all
    # certificates in your local store and then copy the thumbprint for the appropriate certificate
    # by     reviewing the certificate subjects
    
    dir Cert:\LocalMachine\my
    
    # Then include this thumbprint when running the configuration
    $sample_xDscWebServiceRegistrationSplat = @{
        certificateThumbprint = 'A7000024B753FA6FFF88E966FD6E19301FAE9CCC'
        RegistrationKey = '140a952b-b9d6-406b-b416-e0f759c9c0e4'
        OutputPath = 'C:\Configs\PullServer'
    }
    Sample_xDscWebServiceRegistration @sample_xDscWebServiceRegistrationSplat
    
    # Run the compiled configuration to make the target node a DSC Pull Server
    Start-DscConfiguration -Path c:\Configs\PullServer -Wait -Verbose
    

Nyckel för registrering

För att tillåta klientnoder att registrera sig på servern så att de kan använda konfigurationsnamn i stället för ett konfigurations-ID, sparas en registreringsnyckel som skapades av ovanstående konfiguration i en fil med namnet RegistrationKeys.txt i C:\Program Files\WindowsPowerShell\DscService. Registreringsnyckeln fungerar som en delad hemlighet som används under den första registreringen av klienten med pull-servern. Klienten genererar ett självsignerat certifikat som används för att unikt autentisera till pull-servern när registreringen har slutförts. Tumavtrycket för det här certifikatet lagras lokalt och associeras med URL:en för pull-servern.

Anmärkning

Registreringsnycklar stöds inte i PowerShell 4.0.

För att kunna konfigurera en nod så att den autentiseras med pull-servern måste registreringsnyckeln finnas i metakonfigurationen för alla målnoder som ska registreras med den här pull-servern. Observera att RegistrationKey i metakonfigurationen nedan tas bort när måldatorn har registrerats och att värdet måste matcha värdet som lagras i RegistrationKeys.txt filen på pull-servern ('140a952b-b9d6-406b-b416-e0f759c9c0e4' för det här exemplet). Behandla alltid registreringsnyckelvärdet på ett säkert sätt, eftersom du vet att det gör att alla måldatorer kan registreras på pull-servern.

[DSCLocalConfigurationManager()]
configuration Sample_MetaConfigurationToRegisterWithLessSecurePullServer
{
    param
    (
        [ValidateNotNullOrEmpty()]
        [string] $NodeName = 'localhost',

        # the key used to set up pull server in previous configuration
        [ValidateNotNullOrEmpty()]
        [string] $RegistrationKey,

        # The name of the pull server, same as $NodeName used in previous configuration
        [ValidateNotNullOrEmpty()]
        [string] $ServerName = 'localhost'
    )

    Node $NodeName
    {
        Settings
        {
            RefreshMode        = 'Pull'
        }

        ConfigurationRepositoryWeb CONTOSO-PullSrv
        {
            ServerURL          = "https://$ServerName`:8080/PSDSCPullServer.svc"
            RegistrationKey    = $RegistrationKey
            ConfigurationNames = @('ClientConfig')
        }

        ReportServerWeb CONTOSO-PullSrv
        {
            ServerURL       = "https://$ServerName`:8080/PSDSCPullServer.svc"
            RegistrationKey = $RegistrationKey
        }
    }
}

$MetaConfigurationSplat = @{
    RegistrationKey = $RegistrationKey
    OutputPath = 'c:\Configs\TargetNodes'
}

Sample_MetaConfigurationToRegisterWithLessSecurePullServer @MetaConfigurationSplat

Anmärkning

Avsnittet ReportServerWeb gör att rapportdata kan skickas till pull-servern.

Avsaknaden av egenskapen ConfigurationID i metakonfigurationsfilen innebär implicit att pull-servern stöder V2-versionen av pull-serverprotokollet, så en inledande registrering krävs. Omvänt innebär förekomsten av ett ConfigurationID att V1-versionen av pull-serverprotokollet används och att det inte finns någon registreringsbearbetning.

Anmärkning

I ett PUSH-scenario finns det en bugg i den aktuella versionen som gör det nödvändigt att definiera en ConfigurationID-egenskap i metakonfigurationsfilen för noder som aldrig har registrerats på en pull-server. Detta tvingar fram V1 Pull Server-protokollet och undviker meddelanden om registreringsfel.

Placera konfigurationer och resurser

När installationen av pull-servern är klar är de mappar som definieras av egenskaperna ConfigurationPath och ModulePath i pull-serverkonfigurationen den plats där du placerar moduler och konfigurationer som ska vara tillgängliga för målnoder att hämta. Dessa filer måste vara i ett visst format för att pull-servern ska kunna bearbeta dem korrekt.

Paketformat för DSC-resursmodul

Varje resursmodul måste zippas och namnges enligt följande mönster <Module Name>_<Module Version>.zip.

Till exempel skulle en modul med namnet xWebAdminstration med en modulversion av 3.1.2.0 få namnet xWebAdministration_3.1.2.0.zip. Varje version av en modul måste finnas i en enda zip-fil. Eftersom det bara finns en enda version av en resurs i varje zip-fil stöds inte modulformatet som läggs till i WMF 5.0 med stöd för flera modulversioner i en enda katalog. Det innebär att innan du paketerar DSC-resursmoduler för användning med pull-servern måste du göra en liten ändring i katalogstrukturen. Standardformatet för moduler som innehåller DSC-resursen i WMF 5.0 är <Module Folder>\<Module Version>\DscResources\<DSC Resource Folder>\. Innan du packar upp för pull-servern tar du bort <Module version> mappen så att sökvägen blir <Module Folder>\DscResources\<DSC Resource Folder>\. Med den här ändringen zippar du mappen enligt beskrivningen ovan och placerar zip-filerna i mappen ModulePath .

Används New-DscChecksum <module zip file> för att skapa en kontrollsummafil för den nyligen tillagda modulen.

MOF-format för konfiguration

En MOF-konfigurationsfil måste paras ihop med en kontrollsummafil så att en LCM på en målnod kan verifiera konfigurationen. Om du vill skapa en kontrollsumma anropar du cmdleten New-DscChecksum . Cmdleten tar en sökvägsparameter som anger mappen där konfigurations-MOF finns. Cmdleten skapar en kontrollsummafil med namnet ConfigurationMOFName.mof.checksum, where ConfigurationMOFName är namnet på konfigurationen mof file. Om det finns fler än en MOF-konfigurationsfil i den angivna mappen skapas en kontrollsumma för varje konfiguration i mappen. Placera MOF-filerna och deras associerade kontrollsummafiler i mappen ConfigurationPath .

Anmärkning

Om du ändrar MOF-konfigurationsfilen på något sätt måste du också återskapa checksummefilen.

Verktyg

Om du vill konfigurera, validera och hantera pull-servern använder du följande verktyg som ingår som exempel i den senaste versionen av modulen xPSDesiredStateConfiguration:

  1. En modul som hjälper dig att paketera DSC-resursmoduler och konfigurationsfiler för användning på pull-servern. PublishModulesAndMofsToPullServer.psm1. Exempel nedan:

    # Example 1 - Package all versions of given modules installed locally and
    # MOF files are in c:\LocalDepot
    $moduleList = @('xWebAdministration', 'xPhp')
    Publish-DSCModuleAndMof -Source C:\LocalDepot -ModuleNameList $moduleList
    
    # Example 2 - Package modules and mof documents from c:\LocalDepot
    Publish-DSCModuleAndMof -Source C:\LocalDepot -Force
    
  2. Ett skript som verifierar pull-servern är korrekt konfigurerad. PullServerSetupTests.ps1.

Community-lösningar för pull-tjänster

DSC-communityn har skapat flera lösningar för att implementera pull-tjänstprotokollet. För lokala miljöer erbjuder dessa pull-tjänstfunktioner och en möjlighet att bidra tillbaka till communityn med inkrementella förbättringar.

Konfiguration av pull-klient

I följande avsnitt beskrivs hur du konfigurerar pull-klienter i detalj:

Se även