Personalize o plano de migração para serviços IIS do Windows

Reveja o ficheiro do plano de migração preenchido durante a criação da migração. Pode personalizá-lo antes de avançar para a execução da migração. Os detalhes do seu plano de migração são usados para extrair os artefactos do contentor da carga de trabalho da VM de origem.

Esta secção descreve o conteúdo do plano de migração e os tipos de personalizações que pode considerar antes de executar a migração e gerar artefactos de implementação.

Antes de começar

Este documento pressupõe que já criou um plano de migração e tem o ficheiro do plano de migração resultante.

Estrutura do plano de migração

Segue-se a estrutura completa do plano de migração. As secções seguintes abordam esta estrutura, explicam o que é cada parte e como a modificar.

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

A secção globalSettings

A secção globalSettings descreve os requisitos básicos para pods que executam sites do IIS a partir desta VM. O processo de descoberta procura configurações gerais na VM de origem e usa-as para preencher esta secção. Estas configurações contêm campos presentes nas configurações de imagens específicas, conforme descrito na secção seguinte, e afetam todas as imagens ao mesmo tempo.

A secção image

A secção image a seguir a globalSettings descreve a lista de funcionalidades do Windows a instalar nos pods. O processo de deteção preenche esta secção com todas as funcionalidades do Windows existentes na VM original e que podem ser instaladas num contentor do Windows.

A secção msvcRuntimes

Quando migra uma aplicação, esta pode ter uma dependência de uma versão específica ou de versões do Microsoft Visual C++ Runtime (MSVCRT). A migração para contentores deteta automaticamente os tempos de execução instalados na VM de origem e inclui-os no plano de migração.

Pode modificar a lista de tempos de execução no plano de migração adicionando ou removendo membros de msvcRuntimes:

A lista completa de valores possíveis é: (O tempo de execução de 2015 também inclui suporte para 2017, 2019 e 2022)

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

A secção pathEnvVarAdditionalEntries

As aplicações do IIS do Windows podem ter entradas de variáveis de ambiente PATH não predefinidas, que são detetadas automaticamente na VM de origem e incluídas no plano de migração. Pode modificar as variáveis de ambiente PATH editando os membros de pathEnvVarAdditionalEntries:

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

Edite a secção de imagens

Pode querer editar a secção image nos seguintes casos:

  1. Algumas funcionalidades sugeridas não são necessárias para os sites migrados. Isto acontece se a VM de origem tiver utilizações que não sejam o alojamento de sites do IIS.

  2. Modificou as secções do IIS no plano de migração e adicionou configurações que dependem de funcionalidades adicionais do Windows. (Por exemplo, a autenticação do Windows depende da funcionalidade de autenticação do Windows).

A secção target

A secção target especifica a imagem base do Windows que está a usar (por exemplo, 1909). Raramente precisa de editar este campo.

A secção images

Cada subitem da secção images especifica uma única imagem de saída.
No ZIP de artefactos, cada imagem deste tipo tem um subdiretório separado, com o seu próprio Dockerfile e deployment_spec.yaml (consulte Implementar a imagem do contentor).

O campo name

O campo name descreve o nome da imagem. Afeta o nome da subdiretoria de imagens e o ficheiro deployment_spec.yaml nos artefactos.

O campo probes

O campo probes descreve a configuração da sondagem de estado da imagem. Para saber mais sobre as sondas kubelet, consulte o artigo Configure Liveness, Readiness and Startup Probes.

Edite as sondas de funcionamento do IIS

As sondas de estado podem monitorizar a inatividade e o estado de prontidão dos seus contentores geridos. A monitorização da sondagem de saúde pode ajudar a reduzir o tempo de inatividade dos contentores migrados e oferecer uma melhor monitorização.

Os estados de funcionamento desconhecidos podem criar uma degradação da disponibilidade, uma monitorização da disponibilidade com falsos positivos e uma potencial perda de dados. Sem uma sondagem de saúde, o kubelet só pode presumir o estado de um contentor e pode enviar tráfego para uma instância de contentor que não esteja pronta. Se a instância não estiver pronta, pode causar perda de tráfego. O Kubelet também pode não detetar contentores que se encontram num estado congelado e não os reinicia.

Uma sondagem de saúde funciona executando uma pequena declaração com script quando o contentor é iniciado. O script verifica se existem condições bem-sucedidas, que são definidas pelo tipo de teste usado, em todos os períodos. O período é definido no plano de migração por um campo periodSeconds. Pode definir estas sondagens manualmente quando personalizar o plano de migração.

Existem três tipos de sondas disponíveis para configuração. Todas as sondas são sondas v1 core definidas na referência v1 core de sondas e partilham a mesma função que os campos correspondentes de container v1 core.

  • *Sondagem de atividade: as sondagens de atividade são usadas para saber quando reiniciar um contentor.

  • Sondagem de prontidão: as sondagens de prontidão são usadas para saber quando um contentor está pronto para começar a aceitar tráfego. Para começar a enviar tráfego para um pod apenas quando uma sondagem for bem-sucedida, especifique uma sondagem de prontidão. Uma sonda de prontidão pode agir de forma semelhante a uma sonda de atividade. No entanto, uma sondagem de prontidão indica que um pod é iniciado sem receber tráfego e só começa a receber tráfego depois de a sondagem ser bem-sucedida.

  • Sondagem de arranque: o kubelet usa sondagens de arranque para saber quando uma aplicação de contentor foi iniciada. Se for configurada uma sonda deste tipo, desativa as verificações de atividade e prontidão até ter êxito, garantindo que essas sondas não interferem com o início da aplicação.

Após a deteção, a configuração da sondagem é adicionada ao plano de migração. As sondas podem ser usadas na respetiva configuração predefinida, conforme mostrado no exemplo seguinte. A configuração predefinida usa o comando exec para as sondagens de atividade e prontidão. Ambos estão a usar um script do PowerShell denominado probe.ps1 que chama a ferramenta de linha de comandos do IIS appcmd para verificar o estado dos sites do IIS.

As sondas estão desativadas por predefinição. Para as ativar, defina a sinalização enabled como 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

A secção windowsServices

Os contentores Windows criados durante uma migração executam e monitorizam um único serviço Windows IIS. No entanto, algumas cargas de trabalho podem exigir a execução de serviços adicionais (incluindo uma base de dados, um mecanismo de registo, um proxy e muito mais) para funcionarem corretamente.

Para executar serviços adicionais no contentor migrado, adicione entradas à secção windowsServices e copie os ficheiros binários necessários na secção 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

A secção useractions

A secção useractions especifica ficheiros adicionais e chaves de registo que pode querer migrar.

Por exemplo:

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

Os caminhos especificados para currentcontrolset e software são para chaves no HKEY_LOCAL_MACHINE\System\CurrentControlSet ramo de registo ou no ramo de registo HKEY_LOCAL_MACHINE\Software.

Edite a secção useractions

Por predefinição, os únicos ficheiros copiados para a imagem são os diretórios virtuais dos sites na imagem especificada.
Se o seu código ou configurações importarem ficheiros de fora deste diretório, deve adicioná-los à secção useractions.
Além disso, quaisquer valores de registo dos quais o seu código dependa devem ser adicionados editando a secção useractions registry.

As definições relacionadas com o IIS estão divididas em definições relacionadas com sites específicos, que fazem parte da especificação de imagens, e definições relacionadas com todos os sites, que seguem a secção gloabalIis.

A secção sites

A secção Sites descreve os sites que são migrados para uma imagem específica. É possível que várias imagens contenham o mesmo site.

Se quiser usar o Cloud Load Balancing, o Ingress ou o Cloud Service Mesh para processar a configuração SSL, tem de definir protocol como http:

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

A secção apppools

A secção apppools descreve os conjuntos de aplicações criados nos pods migrados.

O campo identitytype especifica a identidade do IIS de um conjunto de aplicações como ApplicationPoolIdentity (predefinição), NetworkService, LocalSystem ou LocalService.

Para mais informações, consulte os artigos Compreender as identidades no IIS e Identidades do conjunto de aplicações.

Segue-se um exemplo de um plano de migração que contém 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 executa o plano de migração para gerar os artefactos do contentor, o Migrate to Containers adiciona automaticamente as diretivas do Dockerfile necessárias de acordo com a definição do campo identitytype.

Por exemplo, se definir identitytype como NetworkService, a diretiva tem o seguinte formato:

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

A migração para contentores adiciona automaticamente diretivas de ACL de leitura às pastas do site de acordo com o identitytype de destino e para o utilizador incorporado IUSR. Isto é feito automaticamente para itens do sistema de ficheiros da aplicação onde a conta da aplicação original foi especificada por herança ou explicitamente.

Para mais informações, consulte o artigo Defina ACLs.

O campo enablegmsa

O campo enablegmsa é uma simplificação sintática no plano de migração. É um atalho para substituir o campo identity do conjunto de aplicações.

Os valores suportados para o campo enablegmsa são:

  • auto (predefinição): converte o contentor migrado para usar o gMSA se a opção Migrar para contentores determinar que a respetiva configuração atual não é permitida.
  • all: converta sempre o contentor migrado para usar o gMSA e ignore a definição de identitytype. Neste caso, identitytype é sempre interpretado como estando definido como NetworkService.

Segue-se um exemplo de um plano de migração que contém enablegmsa:

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

Para saber mais, consulte o artigo Configure a sua app para usar uma gMSA.

Strings de ligação

As strings de ligação definem uma ligação da carga de trabalho do contentor migrado a um fornecedor de dados do .NET Framework.

A migração para contentores suporta strings de ligação ao nível do site e global.

Para adicionar uma string de ligação a um site, edite a definição site no plano de migração para definir a propriedade 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:
      ...

Para adicionar uma string de ligação ao âmbito global (tornando-a acessível a todos os sites), edite as strings de ligação diretamente após globalIis:

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

Onde:

  • name especifica o nome da associação.
  • providername especifica opcionalmente o tipo de fornecedor de dados. A migração para contentores só suporta um valor de System.Data.SqlClient. suporta o fornecedor de dados do .NET Framework:
    • System.Data.SqlClient
    • System.Data.OleDb
    • System.Data.Odbc
    • System.Data.OracleClient
  • connectionstring especifica as Strings de ligação usadas para estabelecer ligação ao fornecedor de dados.

Edite as secções de strings de ligação

A migração para contentores copia automaticamente as strings de ligação detetadas na VM migrada para o plano de migração.

Algumas strings de ligação podem não ser detetadas e devem ser adicionadas editando o plano de migração, conforme mostrado anteriormente. (Por exemplo, se as strings de ligação estiverem numa secção encriptada do ficheiro applicationhost.config).

Para receber orientações sobre como determinar que strings de ligação adicionar ao seu plano de migração, consulte o artigo Obter strings de ligação no tempo de execução na documentação da Microsoft.

Dependências externas da string de ligação

  • As strings de ligação podem conter dependências, como uma referência a um ficheiro ou a um utilizador do Windows associado ao site. Pode adicionar ações do utilizador personalizadas ao plano de migração para copiar um ficheiro adicional no sistema de ficheiros. Edite manualmente o Dockerfile para adicionar um utilizador do Windows.
  • As strings de ligação podem conter dependências, como uma referência a uma origem de dados externa. Estas dependências têm de ser migradas manualmente para garantir que a carga de trabalho do contentor migrado tem acesso à origem de dados.

A secção security

As secções de segurança contêm as subsecções de autenticação e autorização.

  • A autenticação do Windows valida os utilizadores do Active Directory.
  • A autorização do Windows é o mecanismo para especificar que utilizadores têm autorização para que tipos de acesso a um Website do IIS. Os tipos de acesso são os verbos HTTP (POST, GET, PUT, PATCH, DELETE).

Semelhante às strings de ligação, para definir a autorização ou a autenticação para todos os sites, edite globalIis como no exemplo seguinte. Para definir a autorização ou a autenticação para um site específico, edite o elemento do site.

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

Onde:

  • providers especifica o fornecedor dos seus protocolos de segurança.
  • user especifica o nome de utilizador.
  • access especifica as autorizações do utilizador. Os tipos de acesso são os verbos HTTP (POST, GET, PUT, PATCH, DELETE).
  • role especifica uma função de autorização específica.

O que se segue?