Personalizzare il piano di migrazione per i servizi IIS di Windows

Rivedi il file del piano di migrazione compilato durante la creazione della migrazione. Puoi personalizzarlo prima di procedere con l'esecuzione della migrazione. I dettagli del piano di migrazione vengono utilizzati per estrarre gli artefatti del contenitore del carico di lavoro dalla 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 e generare gli elementi di deployment.

Prima di iniziare

Questo documento presuppone che tu abbia già creato un piano di migrazione e che tu abbia 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 illustrano questa struttura, spiegano che cosa sono 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 siti IIS da questa VM. La procedura di rilevamento cerca le configurazioni generali nella VM di origine e le utilizza per compilare questa sezione. Queste configurazioni contengono i campi presenti nelle configurazioni specifiche delle immagini, come descritto nella sezione seguente, e influiscono contemporaneamente su tutte le immagini.

Sezione image

La sezione image successiva a globalSettings descrive l'elenco delle funzionalità di Windows da installare sui pod. La procedura di rilevamento compila questa sezione con tutte le funzionalità di Windows esistenti nella VM originale e che possono essere installate in un contenitore Windows.

Sezione msvcRuntimes

Durante la migrazione di un'applicazione, questa potrebbe dipendere da una o più versioni specifiche del runtime Microsoft Visual C++ (MSVCRT). Migrate to Containers rileva automaticamente i runtime installati sulla VM di origine e li include nel piano di migrazione.

Puoi modificare l'elenco delle versioni di runtime nel piano di migrazione aggiungendo o rimuovendo 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 Windows IIS potrebbero avere voci di variabile di ambiente PATH non predefinite, che vengono rilevate automaticamente nella VM di origine e incluse nel piano di migrazione. Puoi modificare le variabili di ambiente PATH modificando i membri di pathEnvVarAdditionalEntries:

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

Modificare la sezione delle immagini

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 accade se la VM di origine ha utilizzi diversi dall'hosting di siti IIS.

  2. Hai modificato le sezioni IIS nel piano di migrazione e hai 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 Windows di base in uso (ad esempio 1909). Dovresti raramente dover modificare questo campo.

Sezione images

Ogni elemento secondario della sezione images specifica una singola immagine di output.
Nell'archivio ZIP degli elementi, ogni immagine ha una sottodirectory separata, con i propri Dockerfile e deployment_spec.yaml (vedi Eseguire il deployment dell'immagine del contenitore).

Il campo name

Il campo name descrive il nome dell'immagine. Influisce sul nome della sottodirectory delle immagini e sul file deployment_spec.yaml negli elementi.

Il campo probes

Il campo probes descrive la configurazione del probe di integrità dell'immagine. Per approfondire i probe kubelet, consulta Configurare i probe di attività, di idoneità e di avvio.

Modificare i probe di integrità di IIS

I probe di integrità possono monitorare il tempo di riposo e lo stato di disponibilità dei contenitori gestiti. Il monitoraggio delle sonde di salute può contribuire a ridurre i tempi di inattività dei contenitori sottoposti a migrazione e a fornire un monitoraggio migliore.

Gli stati di integrità sconosciuti possono causare un degrado della disponibilità, monitoraggio della disponibilità con falsi positivi e potenziale perdita di dati. Senza un probe di integrità, kubelet può solo assumere l'integrità di un contenitore e potrebbe inviare traffico a un'istanza di contenitore non pronta. Se l'istanza non è pronta, può provocare la perdita di traffico. Kubelet potrebbe anche non rilevare i contenitori in stato bloccato e non riavviarli.

Una sonda di stato funziona eseguendo una piccola istruzione basata su script all'avvio del container. Lo script controlla la presenza di condizioni di successo, che sono definite dal tipo di sonda utilizzata, in ogni periodo. Il periodo è definito nel piano di migrazione da un campo periodSeconds. Puoi definire questi probe manualmente quando personalizzi il piano di migrazione.

Sono disponibili tre tipi di sonde da configurare. Tutti i probe sono probe v1 core definiti in probe v1 core reference e condividono la stessa funzione dei campi corrispondenti di container v1 core.

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

  • Probe di idoneità:i probe di idoneità vengono utilizzati per sapere quando un container è pronto per iniziare ad accettare traffico. Per iniziare a inviare traffico a un pod solo quando un probe va a buon fine, specifica un probe di idoneità. Un probe di idoneità potrebbe funzionare in modo simile a un probe di attività. Tuttavia, un probe di idoneità indica che un pod si avvia senza ricevere traffico e inizia a riceverlo solo dopo il completamento del probe.

  • Probe di avvio:kubelet utilizza i probe di avvio per sapere quando è stata avviata un'applicazione di container. Se è configurato un probe di questo tipo, vengono disattivati i controlli di attività e di idoneità finché non viene eseguito correttamente, assicurandosi che i probe non interferiscano con l'avvio dell'applicazione.

Dopo la scoperta, la configurazione della sonda viene aggiunta al piano di migrazione. I probe possono essere utilizzati nella configurazione predefinita, come mostrato nell'esempio seguente. La configurazione predefinita utilizza il comando exec per i probe di attività e di idoneità. Entrambi utilizzano uno script PowerShell denominato probe.ps1 che chiama lo strumento a riga di comando IIS appcmd per controllare lo stato dei siti IIS.

I controlli sono disattivati per impostazione predefinita. Per attivarli, 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

Container Windows creati durante l'esecuzione di una migrazione e monitorano un singolo servizio IIS Windows. Tuttavia, alcuni carichi di lavoro potrebbero richiedere l'esecuzione di servizi aggiuntivi (tra cui un database, un meccanismo di registrazione, un proxy e altro ancora) per funzionare correttamente.

Per eseguire servizi aggiuntivi nel contenitore sottoposto a migrazione, aggiungi voci alla sezione windowsServices e copia i 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 file e chiavi di registro aggiuntivi di cui potresti voler eseguire la migrazione.

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 rimandano a chiavi nell'hive del Registro di sistema HKEY_LOCAL_MACHINE\System\CurrentControlSet o nell'hive del Registro di sistema HKEY_LOCAL_MACHINE\Software.

Modificare la sezione useractions

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

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

Sezione sites

La sezione sites descrive i siti di cui è stata 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 gli pool di applicazioni creati nei 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 Informazioni sulle 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 del contenitore, Migrate to Containers aggiunge automaticamente le direttive Dockerfile necessarie in base all'impostazione del campo identitytype.

Ad esempio, se imposti identitytype su NetworkService, l'istruzione è nel formato:

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

Migrate to Containers aggiunge automaticamente le direttive ACL di lettura alle directory del sito in base al identitytype di destinazione e per l'utente IUSR integrato. Questa operazione viene eseguita automaticamente per gli elementi del file system dell'applicazione in cui l'account dell'applicazione originale è stato specificato per ereditarietà o esplicitamente.

Per ulteriori informazioni, vedi Impostare le ACL.

Il campo enablegmsa

Il campo enablegmsa è una sintassi nel piano di migrazione. Si tratta di una scorciatoia per sovrascrivere il campo identity del pool di applicazioni.

I valori supportati per il campo enablegmsa sono:

  • auto (valore predefinito): converti il contenitore sottoposto a migrazione in modo che utilizzi gMSA se Migrate to Containers determina che la configurazione corrente non è consentita.
  • all: converti sempre il contenitore sottoposto a migrazione in modo che utilizzi gMSA e ignora l'impostazione di identitytype. In questo caso, identitytype viene sempre interpretato come impostato 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 scoprire di più, consulta Configurare l'app per l'utilizzo di un account gMSA.

Stringhe di connessione

Le stringhe di connessione definiscono una connessione dal carico di lavoro del contenitore sottoposto a migrazione a un provider di dati .NET Framework.

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 nel 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:
      ...

Per aggiungere una stringa di connessione all'ambito globale (rendendola accessibile a tutti i siti), modifica le stringhe di connessione direttamente dopo 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 un valore di System.Data.SqlClient. Supporta il provider di dati .NET Framework:
    • System.Data.SqlClient
    • System.Data.OleDb
    • System.Data.Odbc
    • System.Data.OracleClient
  • connectionstring specifica le stringhe di connessione utilizzate per connettersi al provider di dati.

Modificare le sezioni delle stringhe di connessione

Migrate to Containers copia automaticamente le stringhe di connessione rilevate nella VM di cui è stata eseguita la migrazione nel piano di migrazione.

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

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

Dipendenze esterne della stringa di connessione

  • Le stringhe di connessione possono contenere dipendenze, ad esempio un riferimento a un file o a un utente 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. La migrazione di queste dipendenze deve essere eseguita manualmente per garantire che il carico di lavoro del contenitore sottoposto a migrazione abbia accesso all'origine dati.

Sezione security

Le sezioni Sicurezza contengono le sottosezioni di autenticazione e autorizzazione.

  • L'autenticazione Windows verifica gli utenti di Active Directory.
  • L'autorizzazione Windows è il meccanismo per specificare a quali utenti sono consentiti quali tipi di accesso a un sito web IIS. I tipi di 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 i siti, modifica globalIis come nell'esempio seguente. Per impostare l'autorizzazione o l'autenticazione 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 protocolli di sicurezza.
  • user specifica il nome utente.
  • access specifica le autorizzazioni dell'utente. I tipi di accesso sono i verbi HTTP (POST, GET, PUT, PATCH, DELETE).
  • role specifica un ruolo di autorizzazione specifico.

Passaggi successivi