Personalizza il piano di migrazione per i servizi IIS di Windows

Esamina il file del piano di migrazione compilato durante la creazione dell'elemento migrazione. Puoi personalizzarlo prima di procedere con l'esecuzione della migrazione. I dettagli del piano di migrazione vengono utilizzati per estrarre il container dei carichi di lavoro gli artefatti della VM di origine.

Questa sezione descrive i contenuti del piano di migrazione e i tipi di personalizzazioni che potresti prendere in considerazione prima di eseguire la migrazione gli artefatti di deployment.

Prima di iniziare

Questo documento presuppone che tu abbia già creato un piano di migrazione e ottenere il file del piano di migrazione risultante.

Struttura del piano di migrazione

Di seguito è riportata la struttura completa del piano di migrazione. Le sezioni successive trattano questa struttura, spiegare cos'è ogni parte e come modificarla.

globalSettings:
    globalIis:
        enablegmsa: string
        apppools:
            - enable32bitapponwin64: bool
              identitytype: string
              managedruntimeversion: string
              name: string
        connectionStrings:
            add:
                - connectionstring: string
                  name: string
                  providername: string
        security:
            authentication:
                windowsAuthentication:
                    enabled: bool
                    providers:
                        - value: string
            authorization:
                add:
                    - access_type: string
                      roles: string
                      users: string
                      verbs: string
                remove:
                    - roles: string
                      users: string
                      verbs: string
    image:
        extraFeatures:
            - string
    target:
        baseVersion: string
        requirements:
            - string
        warnings:
            - string
    msvcRuntimes:
            - string
    pathEnvVarAdditionalEntries:
            - string
images:
    - name: string
      probes:
        enabled: bool
        livenessProbe:
            probehandler:
                exec:
                    command:
                        - string
                        - string
            initialdelayseconds: int
            timeoutseconds: int
            periodseconds: int
            successthreshold: int
            failurethreshold: int
            terminationgraceperiodseconds: optional[int]
        readinessProbe:
            probehandler:
                exec:
                    command:
                        - string
                        - string
            initialdelayseconds: int
            timeoutseconds: int
            periodseconds: int
            successthreshold: int
            failurethreshold: int
            terminationgraceperiodseconds: optional[int]
      useractions:
        files:
            - source: string
              target: string
        registry:
            currentcontrolset:
                - path: string
            software:
                - path: string
      workloads:
        sites:
            site:
                - applications:
                    - applicationpool: string
                      path: string
                      virtualdirectories:
                        - path: string
                          physicalpath: string
                  bindings:
                    - port: int
                      protocol: string
                      sslflags: int
                  connectionstrings:
                    - connectionstring: string
                      name: string
                      providername: string
                  name: string
                  security:
                    authentication:
                        windowsAuthentication:
                            enabled: bool
                            providers:
                                - value: string
                    authorization:
                        add:
                            - access_type: string
                              roles: string
                              users: string
                              verbs: string
                        remove:
                            - roles: string
                              users: string
                              verbs: string
                  serverautostart: bool
version: string

Sezione globalSettings

La sezione globalSettings descrive i requisiti di base per i pod che eseguono IIS da questa VM. Il processo di rilevamento cerca configurazioni generali nella VM di origine e le utilizza per compilare questa sezione. Queste configurazioni contengono campi presenti nelle configurazioni di immagine specifiche, come descritto sezione successiva e influisce su tutte le immagini contemporaneamente.

Sezione image

La sezione image che segue globalSettings descrive l'elenco di Funzionalità di Windows da installare sui pod. Il processo di rilevamento compila questa sezione con tutte funzionalità Windows che esistono sulla VM originale e che possono essere installate su un un container Windows.

Sezione msvcRuntimes

Durante la migrazione di un'applicazione, questa potrebbe avere una dipendenza da una versione specifica o le versioni di Microsoft Visual C++ Runtime (MSVCRT). Migrate to Containers rileva automaticamente i runtime installati sulla VM di origine e li ha inclusi nel piano di migrazione.

Puoi modificare l'elenco di runtime nel piano di migrazione aggiungendo o rimozione dei membri di msvcRuntimes:

L'elenco completo dei valori possibili è: (Il runtime 2015 include anche il supporto per 2017, 2019 e 2022)

    msvcRuntimes:
        - MSVC2012_x64
        - MSVC2013_x64
        - MSVC2015_x64
        - MSVC2012_x86
        - MSVC2013_x86
        - MSVC2015_x86

Sezione pathEnvVarAdditionalEntries

Le applicazioni IIS Windows potrebbero avere una variabile di ambiente PATH non predefinita rilevate automaticamente sulla VM di origine e incluse nel di migrazione. Puoi modificare le variabili di ambiente PATH modificando il campo membri di pathEnvVarAdditionalEntries:

    pathEnvVarAdditionalEntries:
      - "C:\\myDllsFolder"
      - "C:\\ProgramData\\SomeSoftware"

Modifica la sezione dell'immagine

Ti consigliamo di modificare la sezione image nei seguenti casi:

  1. Alcune funzionalità suggerite non sono richieste dai siti di cui è stata eseguita la migrazione. Questo si verifica se la VM di origine ha utilizzi diversi dall'hosting dei siti IIS.

  2. Hai modificato le sezioni IIS nel piano di migrazione e aggiunto configurazioni che dipendono da funzionalità aggiuntive di Windows. Ad esempio, L'autenticazione Windows dipende dalla funzionalità di autenticazione Windows).

Sezione target

La sezione target specifica l'immagine di base di Windows in uso (per esempio 1909). Raramente dovrai modificare questo campo.

Sezione images

Ogni elemento secondario della sezione images specifica una singola immagine di output.
Nel file ZIP degli artefatti, ciascuna immagine ha una sottodirectory separata, con Dockerfile e deployment_spec.yaml propri (consulta Deployment dell'immagine container).

Il campo name

Il campo name descrive il nome dell'immagine. Influisce sul nome della sottodirectory dell'immagine e su deployment_spec.yaml negli artefatti.

Il campo probes

Il campo probes descrive la configurazione del probe di integrità dell'immagine. A per saperne di più sui probe kubelet, consulta Configura probe di attività, idoneità e avvio.

Modifica probe di integrità IIS

I probe di integrità possono monitorare il tempo di inattività e lo stato di pronto containers. Il monitoraggio del probe di integrità può aiutare a ridurre i tempi di inattività dei server dei container e migliorare il monitoraggio.

Gli stati di integrità sconosciuti possono causare un peggioramento della disponibilità, falsi positivi il monitoraggio della disponibilità e la potenziale perdita di dati. Senza un probe di integrità, kubelet può solo assumere l'integrità di un container e inviare traffico a un un'istanza di container non ancora pronta. Se l'istanza non è pronta, può causare una perdita di traffico. kubelet potrebbe inoltre non rilevare i container che si trovano in una e non li riavvia.

Un probe di integrità funziona eseguendo una piccola istruzione basata su script quando del container. Lo script verifica la presenza di condizioni riuscite, ovvero definita dal tipo di probe utilizzato, per ogni periodo. Il periodo è definito nel piano di migrazione in base a un campo periodSeconds. Puoi definire questi probe manualmente quando personalizzi il piano di migrazione.

È possibile configurare tre tipi di probe. Tutti i probe sono core del probe v1 definito nel riferimento per il core del probe v1 e condivide la stessa funzione dei campi corrispondenti di container v1 core.

  • *Probe di attività: i probe di attività sono utilizzati per sapere quando riavviare un containerizzato.

  • Probe di idoneità: i probe di idoneità sono utilizzati per sapere quando un container viene puoi iniziare ad accettare traffico. Per iniziare a inviare traffico a un pod solo quando se un probe ha esito positivo, specifica un probe di idoneità. Un probe di idoneità potrebbe agire in modo simile a un probe di attività. Tuttavia, un probe di idoneità indica che il pod si avvia senza ricevere traffico e inizia a riceverne solo dopo il completamento del probe.

  • Probe di avvio: il kubelet utilizza i probe di avvio per sapere quando viene rilevato l'applicazione è stata avviata. Se è configurato un probe, disabilita l'attività e i controlli di idoneità finché non riesce, assicurandosi che i probe non interferiscono con l'avvio dell'applicazione.

Dopo il rilevamento, la configurazione del probe viene aggiunta al piano di migrazione. La i probe possono essere utilizzati nella loro configurazione predefinita, come illustrato di seguito esempio. La configurazione predefinita utilizza il comando exec per l'attività e di idoneità. Entrambi utilizzano uno script PowerShell chiamato probe.ps1 che chiama lo strumento a riga di comando di IIS appcmd per controllare lo stato dei siti IIS.

Per impostazione predefinita, i probe sono disabilitati. Per abilitarli, imposta il flag enabled su true.

images:
name: IMAGE_NAME
      probes:
        enabled: false
        livenessProbe:
            probehandler:
                exec:
                    command:
                        - powershell.exe
                        - C:\m4a\probe.ps1
            initialdelayseconds: 0
            timeoutseconds: 1
            periodseconds: 10
            successthreshold: 1
            failurethreshold: 3
            terminationgraceperiodseconds: null
        readinessProbe:
            probehandler:
                exec:
                    command:
                        - powershell.exe
                        - C:\m4a\probe.ps1
            initialdelayseconds: 0
            timeoutseconds: 1
            periodseconds: 10
            successthreshold: 1
            failurethreshold: 3
            terminationgraceperiodseconds: null

Sezione windowsServices

i container Windows creati durante l'esecuzione di una migrazione e monitorano dal servizio IIS. Tuttavia, alcuni carichi di lavoro potrebbero richiedere l'esecuzione di servizi aggiuntivi (inclusi un database, un meccanismo di logging, un proxy e altro ancora) per funzionare in modo corretto.

Per eseguire servizi aggiuntivi nel container di cui è stata eseguita la migrazione, aggiungi voci al windowsServices e copia i file binari necessari nella Sezione useractions.

version: v1
globalSettings:
    target:
       …
    globalIIS:
    …
images:
  - name: migrated-image-zgwb2
    workloads:
    sites:
      site:
        - applications:
          ...
          bindings:
          - port: 80
            protocol: http
          name: Default Web Site
          …
    windowsServices:
    - MyService
    useractions:
      files:
        - source: C:\Program Files\MyService
          target: C:\Program Files\MyService
      registry:
        currentcontrolset:
          - key: services\MyService

Sezione useractions

La sezione useractions specifica i file e le chiavi del Registro di sistema aggiuntivi che che potresti voler migrare.

Ad esempio:

      useractions:
        files:
        - source: DRIVE:\FOLDER-OR-FILE-PATH
          target: DRIVE:\FOLDER-OR-FILE-PATH
        - source: C:\myfolder
          target: C:\myfolder
        - source: D:\myfile
          target: D:\myfile
        - source: D:\myfile
          target: C:\myfile
        ...
        registry:
          currentcontrolset:
          - path: KEY
          ...
          software:
          - path: KEY
          ...

I percorsi specificati per currentcontrolset e software riguardano le chiavi in HKEY_LOCAL_MACHINE\System\CurrentControlSet hive del registro o nell'hive del registry HKEY_LOCAL_MACHINE\Software.

Modifica la sezione useractions

Per impostazione predefinita, gli unici file copiati nell'immagine sono le directory virtuali siti nell'immagine specificata.
Se il codice o le configurazioni importano file dall'esterno di questa directory, devi aggiungerle alla sezione useractions.
Inoltre, tutti i valori del Registro di sistema da cui dipende il codice devono essere aggiunti modificando nella sezione useractions registry.

Le impostazioni relative a IIS sono suddivise in impostazioni relative a siti specifici, che fanno parte della specifica delle immagini, e le impostazioni relative a tutti i siti, che seguono la sezione gloabalIis.

Sezione sites

La sezione Siti descrive i siti di cui viene eseguita la migrazione a un'immagine specifica. È possibile che più immagini contengano lo stesso sito.

Se vuoi utilizzare Cloud Load Balancing, Ingress o Cloud Service Mesh per gestire la configurazione SSL, devi impostare protocol su http:

sites:
  site:
  - applications:
    - path: /
      virtualdirectories:
        - path: /
          physicalpath: '%SystemDrive%\inetpub\wwwroot'
          bindings:
          - port: 8080
            protocol: http
          name: Default Web Site

Sezione apppools

La sezione apppools descrive i pool di applicazioni creati sui pod di cui è stata eseguita la migrazione.

Il campo identitytype specifica l'identità IIS di un pool di applicazioni come ApplicationPoolIdentity (predefinito), NetworkService, LocalSystem o LocalService.

Per ulteriori informazioni, consulta Comprensione delle identità in IIS e Identità del pool di applicazioni.

Di seguito è riportato un esempio di piano di migrazione contenente identitytype:

migrationPlan:
    applications:
      iis:
        applicationhost:
          apppools:
          - name: DefaultAppPool
            # Allowed values include: ApplicationPoolIdentity (default), NetworkService, LocalSystem, LocalService
            identitytype="NetworkService"
          - managedruntimeversion: v4.0
            name: .NET v4.5 Classic
          - managedruntimeversion: v4.0
            name: .NET v4.5

Quando esegui il piano di migrazione per generare gli artefatti dei container, Migrate to Containers aggiunge automaticamente le istruzioni Dockerfile necessarie in base all'impostazione del campo identitytype.

Ad esempio, se imposti identitytype su NetworkService, l'istruzione si trova in il modulo:

RUN c:\windows\system32\inetsrv\appcmd.exe set apppool \"DefaultAppPool\" \"/-processModel.identityType:NetworkService\";

Migrate to Containers aggiunge automaticamente le istruzioni ACL di lettura le cartelle del sito in base al valore identitytype di destinazione e per il parametro IUSR un utente integrato. Questa operazione viene eseguita automaticamente per gli elementi del file system dell'applicazione in cui la versione originale l'account applicazione è stato specificato per ereditarietà o in modo esplicito.

Per ulteriori informazioni, vedi Impostare gli ACL.

Il campo enablegmsa

Il campo enablegmsa è lo zucchero sintattico del piano di migrazione. È un scorciatoia per sovrascrivere il campo identity del pool di applicazioni.

I valori supportati per il campo enablegmsa sono:

  • auto (valore predefinito): converti il container di cui è stata eseguita la migrazione in modo che utilizzi gMSA se Migrate to Containers determina che la configurazione attuale non è consentito.
  • all: converti sempre il container di cui è stata eseguita la migrazione per utilizzare gMSA e ignora il di identitytype. In questo caso, identitytype è sempre interpretata come impostata su NetworkService.

Di seguito è riportato un esempio di piano di migrazione contenente enablegmsa:

migrationPlan:
    applications:
      iis:
        # Allowed values include: auto (default), all
        enablegmsa: auto|all

Per saperne di più, vedi Configura l'app per l'utilizzo di un gMSA.

Stringhe di connessione

Stringhe di connessione definisci una connessione dal carico di lavoro del container di cui è stata eseguita la migrazione a un .NET Framework fornitore di dati.

Migrate to Containers supporta le stringhe di connessione a livello di sito e globale.

Per aggiungere una stringa di connessione a un sito, modifica la definizione di site nella sezione piano di migrazione per impostare la proprietà connectionstrings:

sites:
  site:
    # Add the site connection strings here.
    connectionstrings:
    - name: connectionname1
      providername: System.Data.SqlClient
      connectionstring: Database=connectedDB1;Password=Welcome1;User=admin;
    - name: connectionname2
      providername: System.Data.OleDb
      connectionstring: Database=connectedDB2;Password=Welcome2;User=admin;
  - applications:
    - path: /
      virtualdirectories:
      ...

Aggiungere una stringa di connessione all'ambito globale in modo che sia accessibile a tutti siti), modifica le stringhe di connessione direttamente seguendo globalIis:

globalIis:
  enablegmsa: auto
  connectionStrings:
  connectionstring:
    - name: connectionname3
      providername: System.Data.SqlClient
      connectionstring: Database=connectedDB3;Password=Welcome3;User=admin;
  applicationhost:
      ...

Dove:

  • name specifica il nome della connessione.
  • providername specifica facoltativamente il tipo di fornitore di dati. Migrate to Containers supporta solo il valore System.Data.SqlClient. supporta il provider di dati .NET Framework:
    • System.Data.SqlClient
    • System.Data.OleDb
    • System.Data.Odbc
    • System.Data.OracleClient
  • connectionstring specifica Stringhe di connessione utilizzati per connettersi al fornitore di dati.

Modifica le sezioni delle stringhe di connessione

Migrate to Containers copia automaticamente le stringhe di connessione rilevate ha eseguito la migrazione della VM al piano di migrazione.

Alcune stringhe di connessione potrebbero non essere rilevate e devono essere aggiunte modificando il piano di migrazione, come mostrato in precedenza. Ad esempio, se la connessione le stringhe si trovano in una sezione criptata del file applicationhost.config).

Per indicazioni su come determinare quali stringhe di connessione aggiungere alla migrazione consulta Recupero delle stringhe di connessione in fase di esecuzione nella documentazione Microsoft.

Dipendenze esterne della stringa di connessione

  • Le stringhe di connessione possono contenere dipendenze, ad esempio un riferimento a un file a o per un utente di Windows associato al sito. Puoi aggiungere azioni utente personalizzate al piano di migrazione per copiare un file aggiuntivo nel file system. Modifica manualmente il Dockerfile per aggiungere un utente Windows.
  • Le stringhe di connessione possono contenere dipendenze, ad esempio un riferimento a un'origine dati esterna. È necessario eseguire manualmente la migrazione di queste dipendenze per garantire che il container di cui è stata eseguita la migrazione carico di lavoro ha accesso all'origine dati.

Sezione security

Le sezioni di sicurezza contengono le sottosezioni relative ad autenticazione e autorizzazione.

  • L'autenticazione di Windows verifica gli utenti di Active Directory.
  • L'autorizzazione Windows è il meccanismo per specificare quali utenti sono autorizzati e quali tipi di accesso a un sito web IIS. L'accesso sono i verbi HTTP (POST, GET, PUT, PATCH, DELETE).

Come per le stringhe di connessione, per impostare l'autorizzazione o l'autenticazione per tutti siti, modifica globalIis come nell'esempio seguente. Per impostare l'autorizzazione per un sito specifico, modifica l'elemento del sito.

globalIis:
    security:
      authentication:
        windowsAuthentication:
          providers:
          - NTLM
      authorization:
        - add:
          user:John
          access:
          role:
         - remove:
              user:Jane
              access: GET
              role: 
            ...

Dove:

  • providers specifica il fornitore dei tuoi protocolli di sicurezza.
  • user specie il nome utente.
  • access specifica le autorizzazioni dell'utente. I tipi di accesso sono HTTP verbi (POST, GET, PUT, PATCH, DELETE).
  • role specifica un ruolo di autorizzazione specifico.

Passaggi successivi