Windows IIS 서비스의 마이그레이션 계획 맞춤설정

마이그레이션을 만드는 동안 채워진 마이그레이션 계획 파일을 검토합니다. 마이그레이션을 실행하기 전에 맞춤설정할 수 있습니다. 마이그레이션 계획의 세부정보는 소스 VM에서 워크로드 컨테이너 아티팩트를 추출하는 데 사용됩니다.

이 섹션에서는 마이그레이션 계획을 실행하고 배포 아티팩트를 생성하기 전에 고려할 수 있는 마이그레이션 콘텐츠 및 맞춤설정의 종류를 설명합니다.

시작하기 전에

이 문서에서는 사용자가 이미 마이그레이션 계획을 만들었고 해당 마이그레이션 계획 파일이 있다고 가정합니다.

마이그레이션 계획 구조

다음은 전체 마이그레이션 계획 구조입니다. 다음 섹션에서는 이 구조를 설명하고 각 부분의 정의와 수정 방법을 설명합니다.

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

globalSettings 섹션

globalSettings 섹션은 이 VM에서 IIS 사이트를 실행하는 포드의 기본 요구사항을 설명합니다. 검색 프로세스는 소스 VM에서 일반 구성을 검색하고 이를 사용하여 이 섹션을 채웁니다. 이러한 구성에는 다음 섹션의 설명처럼 특정 이미지 구성에 있는 필드가 포함되며 동시에 모든 이미지에 영향을 줍니다.

image 섹션

globalSettings 다음의 image 섹션은 포드에 설치할 Windows 기능 목록을 설명합니다. 검색 프로세스는 이 섹션을 원래 VM에 있고 Windows 컨테이너에 설치할 수 있는 모든 Windows 기능으로 채웁니다.

msvcRuntimes 섹션

애플리케이션을 마이그레이션할 때 Microsoft Visual C++ 런타임(MSVCRT)의 특정 버전에 대한 종속 항목이 있을 수 있습니다. Migrate to Containers는 소스 VM에 설치된 런타임을 자동으로 감지하여 마이그레이션 계획에 포함합니다.

msvcRuntimes의 구성원을 추가하거나 삭제하여 마이그레이션 계획에서 런타임 목록을 수정할 수 있습니다.

가능한 값의 전체 목록은 다음과 같습니다. 2015 런타임에는 2017, 2019, 2022 지원도 포함됩니다.

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

pathEnvVarAdditionalEntries 섹션

Windows IIS 애플리케이션에는 기본값이 아닌 PATH 환경 변수 항목이 포함될 수 있으며 소스 VM에서 자동으로 검색되고 마이그레이션 계획에 포함됩니다. pathEnvVarAdditionalEntries의 구성원을 수정하여 PATH 환경 변수를 수정할 수 있습니다.

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

image 섹션 수정

다음과 같은 경우에 image 섹션을 수정할 수 있습니다.

  1. 마이그레이션된 사이트에는 일부 추천 기능이 필요하지 않습니다. 소스 VM에 IIS 사이트 호스팅 외의 사용량이 있을 경우가 이에 해당합니다.

  2. 마이그레이션 계획에서 IIS 섹션을 수정했으며 추가 Windows 기능에 종속된 구성을 추가했습니다. 예를 들어 Windows 인증이 Windows 인증 기능에 따라 다릅니다.

target 섹션

target 섹션은 사용 중인 기본 Windows 이미지를 지정합니다(예: 1909). 이 필드는 거의 수정할 필요가 없습니다.

images 섹션

images 섹션의 각 하위 항목은 단일 출력 이미지를 지정합니다.
아티팩트 zip에서 이러한 각 이미지에는 자체 Dockerfiledeployment_spec.yaml이 있는 별도의 하위 디렉터리가 있습니다(컨테이너 이미지 배포 참조).

name 필드

name 필드는 이미지 이름을 설명합니다. 이미지 하위 디렉터리의 이름과 아티팩트의 deployment_spec.yaml 파일에 영향을 미칩니다.

probes 필드

probes 필드는 이미지의 상태 프로브 구성을 설명합니다. kubelet 프로브에 대한 자세한 내용은 활성, 준비, 시작 프로브 구성을 참조하세요.

IIS 상태 프로브 수정

상태 프로브는 관리형 컨테이너의 다운타임 및 준비 상태를 모니터링할 수 있습니다. 상태 프로브 모니터링은 마이그레이션된 컨테이너의 다운타임을 줄이고 더 나은 모니터링을 제공하는 데 도움이 될 수 있습니다.

알 수 없는 상태에서는 가용성 저하, 거짓양성 가용성 모니터링, 잠재적인 데이터 손실이 발생할 수 있습니다. 상태 프로브가 없으면 kubelet은 컨테이너 상태만 가정할 수 있으며, 준비되지 않은 컨테이너 인스턴스로 트래픽을 전송할 수 있습니다. 인스턴스가 준비되지 않은 경우 트래픽이 손실될 수 있습니다. Kubelet은 고정된 상태의 컨테이너를 감지하지 못할 수도 있으며, 이로 인해 컨테이너를 다시 시작하지 않습니다.

상태 프로브는 컨테이너가 시작될 때 작은 스크립트 문을 실행하여 작동합니다. 이 스크립트는 모든 기간에 사용된 프로브 유형으로 정의된 성공적인 조건을 확인합니다. 기간은 마이그레이션 계획에서 periodSeconds 필드로 정의됩니다. 마이그레이션 계획을 맞춤설정할 때 이러한 프로브를 수동으로 정의할 수 있습니다.

구성할 수 있는 프로브에는 세 가지 유형이 있습니다. 모든 프로브는 probe v1 core 참조에 정의된 probe v1 core이고 container v1 core의 해당 필드와 동일한 함수를 공유합니다.

  • *활성 프로브 활성 프로브는 컨테이너를 다시 시작할 시점을 파악하는 데 사용됩니다.

  • 준비 프로브 - 준비 프로브는 컨테이너가 트래픽을 수락할 준비가 된 시점을 파악하는 데 사용됩니다. 프로브가 성공한 경우에만 포드에 트래픽 전송을 시작하려면 준비 프로브를 지정합니다. 준비 프로브는 활성 프로브와 유사하게 작동할 수 있습니다. 하지만 준비 프로브에서는 포드가 트래픽을 수신하지 않고 시작하며 프로브가 성공한 후에만 트래픽을 수신하기 시작함을 나타냅니다.

  • 시작 프로브: kubelet은 시작 프로브를 사용하여 컨테이너 애플리케이션이 시작된 시간을 파악합니다. 이러한 프로브가 구성되면 성공할 때까지 활성 및 준비 확인이 사용 중지되고, 이러한 프로브가 애플리케이션 시작을 방해하지 않습니다.

검색 후에는 프로브 구성이 마이그레이션 계획에 추가됩니다. 다음 예시와 같이 프로브를 기본 구성에서 사용할 수 있습니다. 기본 구성은 활성 및 준비 상태 프로브에 exec 명령어를 사용합니다. 둘 다 IIS 사이트 상태 확인을 위해 IIS 명령줄 도구 appcmd를 호출하는 probe.ps1이라는 PowerShell 스크립트를 사용합니다.

프로브는 기본적으로 사용 중지되며, 프로브를 사용 설정하려면 enabled 플래그를 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

windowsServices 섹션

마이그레이션 실행 중에 생성된 Windows 컨테이너는 단일 Windows IIS 서비스를 실행하고 모니터링합니다. 그러나 일부 워크로드는 올바른 작동을 위해 데이터베이스, 로깅 메커니즘, 프록시 등의 추가 서비스를 실행해야 할 수 있습니다.

마이그레이션된 컨테이너에서 추가 서비스를 실행하려면 windowsServices 섹션에 항목을 추가하고 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

useractions 섹션

useractions 섹션에서는 마이그레이션하려는 추가 파일과 레지스트리 키를 지정합니다.

예를 들면 다음과 같습니다.

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

currentcontrolsetsoftware에 지정된 경로는 HKEY_LOCAL_MACHINE\System\CurrentControlSet 레지스트리 하이브 또는 HKEY_LOCAL_MACHINE\Software 레지스트리 하이브의 키에 있습니다.

useractions 섹션 수정

기본적으로 이미지에 복사되는 파일만 지정된 이미지에 있는 사이트의 가상 디렉터리입니다.
코드나 구성에서 이 디렉터리 외부에서 파일을 가져오는 경우 파일을 useractions 섹션에 추가해야 합니다.
또한 useractions registry 섹션을 수정하여 코드에 종속된 모든 레지스트리 값을 추가해야 합니다.

IIS 관련 설정은 이미지 사양에 포함된 특정 사이트 관련 설정과 gloabalIis 섹션 다음에 있는 모든 사이트 관련 설정으로 나뉩니다.

sites 섹션

sites 섹션에서는 특정 이미지로 마이그레이션된 사이트를 설명합니다. 여러 이미지에 같은 사이트가 포함될 수 있습니다.

Cloud Load Balancing, 인그레스 또는 Anthos Service Mesh를 사용하여 SSL 구성을 처리하려면 protocolhttp로 설정해야 합니다.

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

apppools 섹션

apppools 섹션에서는 마이그레이션된 포드에 생성된 애플리케이션 풀을 설명합니다.

identitytype 필드는 애플리케이션 풀의 IIS ID를 ApplicationPoolIdentity(기본값), NetworkService, LocalSystem 또는 LocalService로 지정합니다.

자세한 내용은 IIS에서 ID 이해애플리케이션 풀 ID를 참조하세요.

다음은 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

컨테이너 아티팩트를 생성하도록 마이그레이션 계획을 실행하면 Migrate to Containers는 identitytype 필드 설정에 따라 필요한 Dockerfile 지시문을 자동으로 추가합니다.

예를 들어 identitytypeNetworkService로 설정하면 지시문은 다음과 형식과 같습니다.

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

Migrate to Containers는 대상 identitytype에 따라 그리고 IUSR 기본 제공 사용자에 대해 ACL 읽기 지시문을 사이트 폴더에 자동으로 추가합니다. 상속에 의해 또는 명시적으로 원래 애플리케이션 계정이 지정된 애플리케이션 파일 시스템 항목인 경우 자동으로 수행됩니다.

자세한 내용은 ACL 설정을 참조하세요.

enablegmsa 필드

enablegmsa 필드는 마이그레이션 계획의 구문 작업입니다. 애플리케이션 풀의 ID 필드를 덮어쓰는 단축키입니다.

enablegmsa 필드에 지원되는 값은 다음과 같습니다.

  • auto(기본값): Migrate to Containers가 현재 구성이 허용되지 않는 것으로 확인하면 마이그레이션된 컨테이너에서 gMSA를 사용하도록 변환합니다.
  • all: gMSA를 사용하도록 마이그레이션된 컨테이너를 항상 변환하고 identitytype 설정을 무시합니다. 이 경우 identitytype은 항상 NetworkService로 설정된 것으로 해석됩니다.

다음은 enablegmsa를 포함하는 마이그레이션 계획의 예시입니다.

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

자세한 내용은 gMSA를 사용하도록 앱 구성을 참조하세요.

연결 문자열

연결 문자열은 마이그레이션된 컨테이너 워크로드와 .NET Framework 데이터 제공업체 간의 연결을 정의합니다.

Migrate to Containers에서는 사이트와 전역 범위에서 연결 문자열을 지원합니다.

사이트에 연결 문자열을 추가하려면 마이그레이션 계획에서 site 정의를 수정하여 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:
      ...

연결 문자열을 전역 범위(모든 사이트에서 액세스 가능)에 추가하려면 globalIis 바로 다음에 있는 연결 문자열을 수정합니다.

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

각 항목의 의미는 다음과 같습니다.

  • name은 연결 이름을 지정합니다.
  • providername은 데이터 제공업체 유형을 선택적으로 지정합니다. Migrate to Containers에서는 System.Data.SqlClient 값만 지원합니다. 다음은 .NET Framework 데이터 제공업체를 지원합니다.
    • System.Data.SqlClient
    • System.Data.OleDb
    • System.Data.Odbc
    • System.Data.OracleClient
  • connectionstring은 데이터 제공업체에 연결하는 데 사용되는 연결 문자열을 지정합니다.

연결 문자열 섹션 수정

Migrate to Containers는 마이그레이션된 VM에서 감지된 연결 문자열을 마이그레이션 계획으로 자동 복사합니다.

일부 연결 문자열은 감지되지 않을 수 있으며 위와 같이 마이그레이션 계획을 수정하여 이러한 문자열을 추가해야 합니다(즉, 연결 문자열이 applicationhost.config 파일의 암호화된 섹션에 있는 경우).

마이그레이션 계획에 추가할 연결 문자열을 결정하는 방법에 대한 안내는 Microsoft 문서의 런타임 시 연결 문자열 검색을 참조하세요.

연결 문자열 외부 종속 항목

  • 연결 문자열에는 파일 또는 사이트에 연결된 Windows 사용자에 대한 참조와 같은 종속 항목이 포함될 수 있습니다. 커스텀 사용자 작업을 마이그레이션 계획에 추가하여 파일 시스템에서 추가 파일을 복사할 수 있습니다. Windows 사용자를 추가하도록 Dockerfile을 수동으로 수정합니다.
  • 연결 문자열은 외부 데이터 소스에 대한 참조와 같은 종속 항목을 포함할 수 있습니다. 마이그레이션된 컨테이너 워크로드가 데이터 소스에 액세스할 수 있도록 하려면 이러한 종속 항목을 수동으로 마이그레이션해야 합니다.

security 섹션

보안 섹션에는 인증 및 승인 하위 섹션이 있습니다.

  • Windows 인증에서는 Active Directory 사용자를 확인합니다.
  • Windows 승인은 사용자에게 허용되는 IIS 웹사이트에 대한 액세스 유형을 지정하는 메커니즘입니다. 액세스 유형은 HTTP 동사(POST, GET, PUT, PATCH, DELETE)입니다.

연결 문자열과 마찬가지로 모든 사이트에 승인이나 인증을 설정하려면 다음 예시와 같이 globalIis를 수정합니다. 특정 사이트에 승인이나 인증을 설정하려면 사이트 요소를 수정합니다.

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

각 항목의 의미는 다음과 같습니다.

  • providers는 보안 프로토콜의 제공업체를 지정합니다.
  • user는 사용자 이름을 지정합니다.
  • access는 사용자의 권한을 지정합니다. 액세스 유형은 HTTP 동사(POST, GET, PUT, PATCH, DELETE)입니다.
  • role은 특정 권한 역할을 지정합니다.

다음 단계