Freigeben über


Pulldienst für die Konfiguration des gewünschten Zustands

Von Bedeutung

Der Pullserver (Windows Feature DSC-Service) ist eine unterstützte Komponente von Windows Server, es ist jedoch nicht geplant, neue Features oder Funktionen anzubieten. Wir möchten Sie darauf hinweisen, dass eine neuere Version von DSC jetzt allgemein verfügbar ist und von einem Feature von Azure Policy mit dem Namen guest configuration verwaltet wird. Der Gastkonfigurationsdienst kombiniert Features der DSC-Erweiterung, der Azure Automation State Configuration und der am häufigsten angeforderten Features aus Kundenfeedback. Die Gastkonfiguration umfasst auch die Unterstützung von Hybridmaschinen über Arc-fähige Server.

Local Configuration Manager (LCM) kann zentral von einer Pull Service-Lösung verwaltet werden. Bei Verwendung dieses Ansatzes wird der Knoten, der verwaltet wird, bei einem Dienst registriert und einer Konfiguration in den LCM-Einstellungen zugewiesen. Die Konfiguration und alle DSC-Ressourcen, die als Abhängigkeiten für die Konfiguration benötigt werden, werden auf den Computer heruntergeladen und von LCM zum Verwalten der Konfiguration verwendet. Informationen über den Status des verwalteten Computers werden zur Berichterstellung in den Dienst hochgeladen. Dieses Konzept wird als "Pull-Service" bezeichnet.

Zu den aktuellen Optionen für den Pull-Dienst gehören:

  • Azure Automation-Dienst für die Konfiguration des gewünschten Zustands
  • Ein Pulldienst, der unter Windows Server ausgeführt wird
  • Von der Community gepflegte Open-Source-Lösungen
  • Eine SMB-Freigabe

Die empfohlene Skalierung für jede Lösung lautet wie folgt:

Lösung Client-Knoten
Windows Pull Server mit MDB/ESENT-Datenbank Bis zu 500 Knoten
Windows Pull Server mit SQL-Datenbank Bis zu 3500 Knoten
Azure Automation DSC Sowohl kleine als auch große Umgebungen

Die empfohlene Lösung und die Option mit den meisten verfügbaren Features ist Azure Automation DSC. Eine Obergrenze für die Anzahl der Knoten pro Automation-Konto wurde nicht festgelegt.

Der Azure-Dienst kann Knoten lokal in privaten Rechenzentren oder in öffentlichen Clouds wie Azure und AWS verwalten. Für private Umgebungen, in denen Server keine direkte Verbindung mit dem Internet herstellen können, sollten Sie erwägen, ausgehenden Datenverkehr auf den veröffentlichten Azure-IP-Adressbereich zu beschränken (siehe Azure-IP-Adressbereiche und Diensttags).

Zu den Features des Onlinediensts, die derzeit nicht im Pulldienst unter Windows Server verfügbar sind, gehören:

  • Alle Daten werden während der Übertragung und im Ruhezustand verschlüsselt
  • Client-Zertifikate werden automatisch erstellt und verwaltet
  • Secrets-Speicher für die zentrale Verwaltung von Kennwörtern/Anmeldeinformationen oder Variablen wie Servernamen oder Verbindungszeichenfolgen
  • Zentrale Verwaltung der LCM-Konfiguration von Knoten
  • Zentrale Zuweisung von Konfigurationen zu Client-Knoten
  • Änderungen an der Release-Konfiguration in "Canary-Gruppen" zum Testen vor Erreichen der Produktion
  • Grafische Berichterstattung
    • Statusdetails auf der Granularitätsebene der DSC-Ressource
    • Ausführliche Fehlermeldungen von Clientcomputern zur Fehlerbehebung
  • Integration mit Azure Log Analytics für Warnungen, automatisierte Aufgaben, Android/iOS-App für Berichterstellung und Warnungen

DSC-Pulldienst in Windows Server

Es ist möglich, einen Pulldienst für die Ausführung unter Windows Server zu konfigurieren. Beachten Sie, dass die in Windows Server enthaltene Pulldienstlösung nur Funktionen zum Speichern von Konfigurationen und Modulen zum Herunterladen und zum Erfassen von Berichtsdaten in einer Datenbank enthält. Er enthält nicht viele der Funktionen, die der Dienst in Azure bietet, und ist daher kein gutes Tool zum Auswerten, wie der Dienst verwendet wird.

Der in Windows Server angebotene Pulldienst ist ein Webdienst in IIS, der eine OData-Schnittstelle verwendet, um DSC-Konfigurationsdateien für Zielknoten verfügbar zu machen, wenn diese Knoten danach fragen.

Voraussetzungen für die Verwendung eines Pullservers:

  • Ein Server, auf dem Folgendes ausgeführt wird:
    • WMF/PowerShell 4.0 oder höher
    • IIS-Serverrolle
    • DSC-Dienst
  • Im Idealfall gibt es eine Möglichkeit zum Generieren eines Zertifikats, um Anmeldeinformationen zu sichern, die an den Local Configuration Manager (LCM) auf Zielknoten übergeben werden

Die beste Möglichkeit, Windows Server so zu konfigurieren, dass der Pulldienst gehostet wird, ist die Verwendung einer DSC-Konfiguration. Ein Beispielskript finden Sie unten.

Unterstützte Datenbanksysteme

Ab Version 17090 von Windows Server bietet WMF 5.1 Unterstützung für die SQL Server-Option für den Pull-Dienst (Windows-Feature DSC-Service). Dies bietet eine neue Option zum Skalieren großer DSC-Umgebungen, die nicht zu Azure Automation DSC migriert wurden.

Um den Pullserver für die Verwendung von SQL Server zu konfigurieren, legen Sie SqlProvider auf $true und SqlConnectionString auf eine gültige SQL Server-Verbindungszeichenfolge fest. Weitere Informationen finden Sie unter SqlClient-Verbindungszeichenfolgen. Ein Beispiel für die SQL Server-Konfiguration mit xDscWebService finden Sie zunächst unter Verwenden der xDscWebService-Ressource , und überprüfen Sie dann 2-xDscWebService_RegistrationUseSQLProvider_Config.ps1 auf GitHub.

Verwenden der xDscWebService-Ressource

Die einfachste Möglichkeit zum Einrichten eines Webpullservers besteht darin, die xDscWebService-Ressource zu verwenden, die im xPSDesiredStateConfiguration-Modul enthalten ist. In den folgenden Schritten wird erläutert, wie Sie die Ressource in einer Ressource Configuration verwenden, die den Webdienst einrichtet.

  1. Rufen Sie das Cmdlet Install-Module auf, um das xPSDesiredStateConfiguration-Modul zu installieren.

  2. Rufen Sie ein SSL-Zertifikat für den DSC-Pullserver von einer vertrauenswürdigen Zertifizierungsstelle ab, entweder innerhalb Ihrer Organisation oder einer öffentlichen Behörde. Das von der Zertifizierungsstelle empfangene Zertifikat liegt in der Regel im PFX-Format vor.

  3. Installieren Sie das Zertifikat auf dem Knoten, der zum DSC-Pullserver wird, am Standardspeicherort, der lauten sollte CERT:\LocalMachine\My. Notieren Sie sich den Fingerabdruck des Zertifikats.

  4. Wählen Sie eine GUID aus, die als Registrierungsschlüssel verwendet werden soll. Um eine Version mit PowerShell zu generieren, geben Sie Folgendes an der PS-Eingabeaufforderung ein, und drücken Sie die Eingabetaste: [guid]::newGuid() oder New-Guid. Dieser Schlüssel wird von Clientknoten als gemeinsam genutzter Schlüssel für die Authentifizierung während der Registrierung verwendet. Weitere Informationen finden Sie im Abschnitt Registrierungsschlüssel weiter unten.

  5. Starten Sie in der PowerShell ISE (F5) das folgende Konfigurationsskript (im Ordner des xPSDesiredStateConfiguration-Moduls als Sample_xDscWebServiceRegistration.ps1.

    Mit diesem Skript wird der Pullserver eingerichtet.

    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. Führen Sie die Konfiguration aus, und übergeben Sie den Fingerabdruck des SSL-Zertifikats als certificateThumbPrint-Parameter und einen GUID-Registrierungsschlüssel als RegistrationKey-Parameter :

    # 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
    

Registrierungsschlüssel

Damit Clientknoten sich beim Server registrieren können, sodass sie Konfigurationsnamen anstelle einer Konfigurations-ID verwenden können, wird ein Registrierungsschlüssel, der von der obigen Konfiguration erstellt wurde, in einer Datei mit dem Namen RegistrationKeys.txt in C:\Program Files\WindowsPowerShell\DscServicegespeichert. Der Registrierungsschlüssel fungiert als gemeinsamer geheimer Schlüssel, der während der ersten Registrierung durch den Client beim Pullserver verwendet wird. Der Client generiert ein selbstsigniertes Zertifikat, das zur eindeutigen Authentifizierung beim Pullserver verwendet wird, sobald die Registrierung erfolgreich abgeschlossen wurde. Der Fingerabdruck dieses Zertifikats wird lokal gespeichert und der URL des Pullservers zugeordnet.

Hinweis

Registrierungsschlüssel werden in PowerShell 4.0 nicht unterstützt.

Um einen Knoten für die Authentifizierung beim Pullserver zu konfigurieren, muss sich der Registrierungsschlüssel in der Metakonfiguration für jeden Zielknoten befinden, der bei diesem Pullserver registriert wird. Beachten Sie, dass der RegistrationKey in der folgenden Metakonfiguration entfernt wird, nachdem der Zielcomputer erfolgreich registriert wurde, und dass der Wert mit dem Wert übereinstimmen muss, der in der RegistrationKeys.txt Datei auf dem Pullserver gespeichert ist ('140a952b-b9d6-406b-b416-e0f759c9c0e4' für dieses Beispiel). Behandeln Sie den Registrierungsschlüsselwert immer sicher, da sich jeder Zielcomputer beim Pullserver registrieren kann, wenn Sie ihn kennen.

[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

Hinweis

Im Abschnitt ReportServerWeb können Berichtsdaten an den Pullserver gesendet werden.

Das Fehlen der ConfigurationID-Eigenschaft in der Metakonfigurationsdatei bedeutet implizit, dass der Pullserver die V2-Version des Pullserverprotokolls unterstützt, sodass eine erste Registrierung erforderlich ist. Umgekehrt bedeutet das Vorhandensein einer ConfigurationID , dass die V1-Version des Pullserverprotokolls verwendet wird und keine Registrierungsverarbeitung stattfindet.

Hinweis

In einem PUSH-Szenario ist in der aktuellen Version ein Fehler vorhanden, der es erforderlich macht, eine ConfigurationID-Eigenschaft in der Metakonfigurationsdatei für Knoten zu definieren, die noch nie bei einem Pullserver registriert wurden. Dadurch wird das V1-Pullserverprotokoll erzwungen, und Registrierungsfehlermeldungen werden vermieden.

Platzieren von Konfigurationen und Ressourcen

Nachdem das Pullserversetup abgeschlossen ist, platzieren Sie in den Ordnern, die durch die Eigenschaften ConfigurationPath und ModulePath in der Pullserverkonfiguration definiert sind, Module und Konfigurationen , die für Zielknoten zum Pullen verfügbar sind. Diese Dateien müssen in einem bestimmten Format vorliegen, damit sie vom Pullserver ordnungsgemäß verarbeitet werden können.

Paketformat des DSC-Ressourcenmoduls

Jedes Ressourcenmodul muss gezippt und nach dem folgenden Muster <Module Name>_<Module Version>.zipbenannt werden.

Ein Modul mit dem Namen xWebAdminstration und der Modulversion 3.1.2.0 erhält z. B. den Namen xWebAdministration_3.1.2.0.zip. Jede Version eines Moduls muss in einer einzigen ZIP-Datei enthalten sein. Da in jeder ZIP-Datei nur eine einzelne Version einer Ressource vorhanden ist, wird das in WMF 5.0 hinzugefügte Modulformat mit Unterstützung für mehrere Modulversionen in einem einzelnen Verzeichnis nicht unterstützt. Dies bedeutet, dass Sie vor dem Packen von DSC-Ressourcenmodulen für die Verwendung mit Pullservern eine kleine Änderung an der Verzeichnisstruktur vornehmen müssen. Das Standardformat von Modulen, die eine DSC-Ressource in WMF 5.0 enthalten, ist <Module Folder>\<Module Version>\DscResources\<DSC Resource Folder>\. Entfernen Sie vor dem Verpacken für den Pullserver den <Module version> Ordner, sodass der Pfad zu <Module Folder>\DscResources\<DSC Resource Folder>\. Mit dieser Änderung komprimieren Sie den Ordner wie oben beschrieben, und legen Sie diese ZIP-Dateien im Ordner ModulePath ab.

Verwenden Sie diese New-DscChecksum <module zip file> Option, um eine Prüfsummendatei für das neu hinzugefügte Modul zu erstellen.

Konfiguration MOF-Format

Eine MOF-Konfigurationsdatei muss mit einer Prüfsummendatei gekoppelt werden, damit ein LCM auf einem Zielknoten die Konfiguration validieren kann. Rufen Sie zum Erstellen einer Prüfsumme das Cmdlet New-DscChecksum auf. Das Cmdlet verwendet einen Path-Parameter , der den Ordner angibt, in dem sich das Konfigurations-MOF befindet. Das Cmdlet erstellt eine Prüfsummendatei mit dem Namen ConfigurationMOFName.mof.checksum, wobei ConfigurationMOFName der Name der MOF-Konfigurationsdatei ist. Wenn sich mehr als eine MOF-Konfigurationsdatei im angegebenen Ordner befindet, wird für jede Konfiguration in dem Ordner eine Prüfsumme erstellt. Platzieren Sie die MOF-Dateien und die zugehörigen Prüfsummendateien im Ordner ConfigurationPath .

Hinweis

Wenn Sie die MOF-Konfigurationsdatei in irgendeiner Weise ändern, müssen Sie auch die Prüfsummendatei neu erstellen.

Werkzeugbau

Verwenden Sie zum Einrichten, Überprüfen und Verwalten des Pullservers die folgenden Tools, die in der neuesten Version des xPSDesiredStateConfiguration-Moduls als Beispiele enthalten sind:

  1. Ein Modul, das beim Verpacken von DSC-Ressourcenmodulen und Konfigurationsdateien für die Verwendung auf dem Pullserver hilfreich ist. PublishModulesAndMofsToPullServer.psm1. Beispiele unten:

    # 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. Ein Skript, das den Pullserver überprüft, ist ordnungsgemäß konfiguriert. PullServerSetupTests.ps1.

Community-Lösungen für den Pull-Service

Die DSC-Community hat mehrere Lösungen entwickelt, um das Pulldienstprotokoll zu implementieren. Für lokale Umgebungen bieten diese Pull-Service-Funktionen und die Möglichkeit, mit inkrementellen Verbesserungen einen Beitrag zur Community zu leisten.

Pull-Client-Konfiguration

In den folgenden Themen wird das Einrichten von Pullclients ausführlich beschrieben:

Siehe auch