Menyesuaikan rencana migrasi untuk layanan Windows IIS

Tinjau file rencana migrasi yang diisi selama pembuatan migrasi. Anda dapat menyesuaikannya sebelum melanjutkan untuk menjalankan migrasi. Detail rencana migrasi Anda digunakan untuk mengekstrak artefak penampung workload dari VM sumber.

Bagian ini menjelaskan konten rencana migrasi dan jenis penyesuaian yang dapat Anda pertimbangkan sebelum menjalankan migrasi, dan membuat artefak deployment.

Sebelum memulai

Dokumen ini mengasumsikan bahwa Anda telah membuat rencana migrasi dan memiliki file rencana migrasi yang dihasilkan.

Struktur rencana migrasi

Berikut adalah struktur rencana migrasi lengkap. Bagian berikutnya membahas struktur ini, menjelaskan setiap bagian, dan cara mengubahnya.

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

Bagian globalSettings

Bagian globalSettings menjelaskan persyaratan dasar untuk pod yang menjalankan situs IIS dari VM ini. Proses penemuan menelusuri konfigurasi umum di VM sumber, dan menggunakannya untuk mengisi bagian ini. Konfigurasi ini berisi kolom yang ada dalam konfigurasi image tertentu seperti yang dijelaskan di bagian berikut, dan memengaruhi semua image secara bersamaan.

Bagian image

Bagian image setelah globalSettings menjelaskan daftar fitur Windows yang akan diinstal di pod. Proses penemuan mengisi bagian ini dengan semua fitur Windows yang ada di VM asli, dan dapat diinstal di penampung Windows.

Bagian msvcRuntimes

Saat memigrasikan aplikasi, aplikasi tersebut mungkin memiliki dependensi pada versi tertentu atau versi Microsoft Visual C++ Runtime (MSVCRT). Migrate to Containers otomatis mendeteksi runtime yang diinstal di VM sumber dan menyertakannya dalam rencana migrasi.

Anda dapat mengubah daftar runtime dalam rencana migrasi dengan menambahkan atau menghapus anggota msvcRuntimes:

Daftar lengkap nilai yang memungkinkan adalah: (Runtime 2015 juga mencakup dukungan untuk 2017, 2019, dan 2022)

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

Bagian pathEnvVarAdditionalEntries

Aplikasi IIS Windows mungkin memiliki entri variabel lingkungan PATH non-default, yang otomatis terdeteksi di VM sumber dan disertakan dalam rencana migrasi. Anda dapat mengubah variabel lingkungan PATH dengan mengedit anggota pathEnvVarAdditionalEntries:

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

Mengedit bagian gambar

Anda mungkin ingin mengedit bagian image dalam kasus berikut:

  1. Beberapa fitur yang disarankan tidak diperlukan oleh situs yang dimigrasikan. Hal ini terjadi jika VM sumber memiliki penggunaan selain menghosting situs IIS.

  2. Anda telah mengubah bagian IIS dalam rencana migrasi, dan menambahkan konfigurasi yang bergantung pada fitur Windows tambahan. (Misalnya, autentikasi Windows bergantung pada fitur autentikasi Windows).

Bagian target

Bagian target menentukan image Windows dasar yang Anda gunakan (misalnya, 1909). Anda jarang perlu mengedit kolom ini.

Bagian images

Setiap subitem bagian images menentukan satu gambar output.
Dalam zip artefak, setiap image tersebut memiliki subdirektori terpisah, dengan Dockerfile dan deployment_spec.yaml-nya sendiri (lihat Men-deploy image penampung).

Kolom name

Kolom name menjelaskan nama gambar. Hal ini memengaruhi nama subdirektori gambar dan file deployment_spec.yaml dalam artefak.

Kolom probes

Kolom probes menjelaskan konfigurasi pemeriksaan kesehatan image. Untuk mempelajari pemeriksaan kubelet lebih lanjut, lihat Mengonfigurasi Pemeriksaan Keaktifan, Kesiapan, dan Proses Mulai Sistem.

Mengedit pemeriksaan kesehatan IIS

Pemeriksaan kondisi dapat memantau periode nonaktif dan status siap penampung yang dikelola. Pemantauan Health Probe dapat membantu mengurangi periode nonaktif penampung yang dimigrasikan dan memberikan pemantauan yang lebih baik.

Status kondisi yang tidak diketahui dapat menyebabkan penurunan ketersediaan, pemantauan ketersediaan positif palsu, dan potensi kehilangan data. Tanpa pemeriksaan kondisi, kubelet hanya dapat mengasumsikan kondisi container dan mungkin mengirim traffic ke instance container yang belum siap. Jika belum siap, instance dapat menyebabkan hilangnya traffic. Kubelet mungkin juga tidak mendeteksi penampung yang berada dalam status beku dan tidak memulai ulang penampung tersebut.

Pemeriksaan kesehatan berfungsi dengan menjalankan pernyataan skrip kecil saat penampung dimulai. Skrip memeriksa kondisi yang berhasil, yang ditentukan oleh jenis probe yang digunakan, setiap periode. Periode ditentukan dalam rencana migrasi oleh kolom periodSeconds. Anda dapat menentukan probe ini secara manual saat menyesuaikan rencana migrasi.

Ada tiga jenis probe yang tersedia untuk dikonfigurasi. Semua probe adalah probe v1 core yang ditentukan dalam referensi probe v1 core dan memiliki fungsi yang sama dengan kolom yang sesuai dari container v1 core.

  • *Pemeriksaan keaktifan: Pemeriksaan keaktifan digunakan untuk mengetahui kapan harus memulai ulang penampung.

  • Pemeriksaan kesiapan: Pemeriksaan kesiapan digunakan untuk mengetahui kapan penampung siap untuk mulai menerima traffic. Untuk mulai mengirim traffic ke pod hanya saat pemeriksaan berhasil, tentukan pemeriksaan kesiapan. Pemeriksaan kesiapan mungkin bertindak serupa dengan pemeriksaan keaktifan. Namun, pemeriksaan kesiapan menunjukkan bahwa pod dimulai tanpa menerima traffic apa pun dan hanya mulai menerima traffic setelah pemeriksaan berhasil.

  • Pemeriksaan startup: Kubelet menggunakan pemeriksaan startup untuk mengetahui kapan aplikasi container dimulai. Jika dikonfigurasi, pemeriksaan tersebut akan menonaktifkan pemeriksaan keaktifan dan kesiapan hingga berhasil, sehingga memastikan bahwa pemeriksaan tersebut tidak mengganggu startup aplikasi.

Setelah penemuan, konfigurasi probe ditambahkan ke rencana migrasi. Probe dapat digunakan dalam konfigurasi defaultnya seperti yang ditunjukkan dalam contoh berikut. Konfigurasi default menggunakan perintah exec untuk pemeriksaan keaktifan dan kesiapan. Keduanya menggunakan skrip PowerShell yang disebut probe.ps1 yang memanggil alat command line IIS appcmd untuk memeriksa status situs IIS.

Probe dinonaktifkan secara default. Untuk mengaktifkan probe, tetapkan flag enabled ke 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

Bagian windowsServices

Penampung Windows yang dibuat selama migrasi berjalan dan memantau satu layanan Windows IIS. Namun, beberapa beban kerja mungkin memerlukan layanan tambahan yang berjalan (termasuk database, mekanisme logging, proxy, dan lainnya) agar dapat berfungsi dengan benar.

Untuk menjalankan layanan tambahan dalam penampung yang dimigrasikan, tambahkan entri ke bagian windowsServices, dan salin biner yang diperlukan di bagian 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

Bagian useractions

Bagian useractions menentukan file dan kunci registry tambahan yang mungkin ingin Anda migrasikan.

Contoh:

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

Jalur yang ditentukan untuk currentcontrolset dan software adalah ke kunci di hive registry HKEY_LOCAL_MACHINE\System\CurrentControlSet atau di hive registry HKEY_LOCAL_MACHINE\Software.

Mengedit bagian useractions

Secara default, satu-satunya file yang disalin ke image adalah direktori virtual situs dalam image yang ditentukan.
Jika kode atau konfigurasi Anda mengimpor file dari luar direktori ini, Anda harus menambahkannya ke bagian useractions.
Selain itu, nilai registry apa pun yang menjadi dependensi kode Anda harus ditambahkan dengan mengedit bagian useractions registry.

Setelan terkait IIS dibagi menjadi setelan yang terkait dengan situs tertentu, yang merupakan bagian dari spesifikasi image, dan setelan yang terkait dengan semua situs, yang mengikuti bagian gloabalIis.

Bagian sites

Bagian situs menjelaskan situs yang dimigrasikan ke image tertentu. Beberapa gambar dapat berisi situs yang sama.

Jika ingin menggunakan Cloud Load Balancing, Ingress, atau Cloud Service Mesh untuk menangani konfigurasi SSL, Anda harus menetapkan protocol ke http:

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

Bagian apppools

Bagian apppools menjelaskan Application Pools yang dibuat di pod yang dimigrasikan.

Kolom identitytype menentukan identitas IIS kumpulan aplikasi sebagai ApplicationPoolIdentity (default), NetworkService, LocalSystem, atau LocalService.

Untuk mengetahui informasi selengkapnya, lihat Memahami identitas di IIS dan Identitas Application Pool.

Berikut adalah contoh rencana migrasi yang berisi 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

Saat Anda menjalankan rencana migrasi untuk membuat artefak penampung, Migrate to Containers akan otomatis menambahkan perintah Dockerfile yang diperlukan sesuai dengan setelan kolom identitytype.

Misalnya, jika Anda menetapkan identitytype ke NetworkService, perintahnya dalam bentuk:

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

Migrate to Containers otomatis menambahkan perintah ACL baca ke folder situs sesuai dengan identitytype target, dan untuk pengguna bawaan IUSR. Hal ini dilakukan secara otomatis untuk item sistem file aplikasi tempat akun aplikasi asli ditentukan oleh pewarisan atau secara eksplisit.

Untuk mengetahui informasi selengkapnya, lihat Menetapkan ACL.

Kolom enablegmsa

Kolom enablegmsa adalah sintaksis mudah dalam rencana migrasi. Ini adalah pintasan untuk menimpa kolom identity kumpulan aplikasi.

Nilai yang didukung untuk kolom enablegmsa adalah:

  • auto (default): Mengonversi penampung yang dimigrasikan untuk menggunakan gMSA jika Migrate to Containers menentukan bahwa konfigurasinya saat ini tidak diizinkan.
  • all: Selalu konversikan penampung yang dimigrasikan untuk menggunakan gMSA dan abaikan setelan identitytype. Dalam hal ini, identitytype selalu ditafsirkan sebagai ditetapkan ke NetworkService.

Berikut adalah contoh rencana migrasi yang berisi enablegmsa:

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

Untuk mempelajari lebih lanjut, lihat Mengonfigurasi aplikasi untuk menggunakan gMSA.

String koneksi

String koneksi menentukan koneksi dari workload penampung yang dimigrasikan ke penyedia data .NET Framework.

Migrate to Containers mendukung string koneksi di cakupan situs dan global.

Untuk menambahkan string koneksi ke situs, edit definisi site dalam rencana migrasi untuk menetapkan properti 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:
      ...

Untuk menambahkan string koneksi ke cakupan global (sehingga dapat diakses oleh semua situs), edit string koneksi tepat setelah globalIis:

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

Dengan keterangan:

  • name menentukan nama koneksi.
  • providername secara opsional menentukan jenis penyedia data. Migrate to Containers hanya mendukung nilai System.Data.SqlClient. mendukung penyedia data .NET Framework:
    • System.Data.SqlClient
    • System.Data.OleDb
    • System.Data.Odbc
    • System.Data.OracleClient
  • connectionstring menentukan String Koneksi yang digunakan untuk terhubung ke penyedia data.

Mengedit bagian string koneksi

Migrate to Containers akan otomatis menyalin string koneksi yang terdeteksi di VM yang dimigrasikan ke rencana migrasi.

Beberapa string koneksi mungkin tidak terdeteksi dan harus ditambahkan dengan mengedit rencana migrasi seperti yang ditunjukkan sebelumnya. (Misalnya, jika string koneksi berada di bagian terenkripsi file applicationhost.config).

Untuk panduan menentukan string koneksi yang akan ditambahkan ke rencana migrasi, lihat Mengambil String Koneksi pada Waktu Proses dalam dokumentasi Microsoft.

Dependensi eksternal string koneksi

  • String koneksi dapat berisi dependensi, seperti referensi ke file di atau ke pengguna Windows yang terkait dengan situs. Anda dapat menambahkan tindakan pengguna kustom ke rencana migrasi untuk menyalin file tambahan dalam sistem file. Edit Dockerfile secara manual untuk menambahkan pengguna Windows.
  • String koneksi dapat berisi dependensi, seperti referensi ke sumber data eksternal. Dependensi ini harus dimigrasikan secara manual untuk memastikan bahwa beban kerja penampung yang dimigrasikan memiliki akses ke sumber data.

Bagian security

Bagian keamanan berisi subbagian autentikasi dan otorisasi.

  • Autentikasi Windows memverifikasi pengguna Active Directory.
  • Otorisasi Windows adalah mekanisme untuk menentukan pengguna mana yang diizinkan untuk mengakses situs IIS. Jenis akses adalah kata kerja HTTP (POST, GET, PUT, PATCH, DELETE).

Serupa dengan string koneksi, untuk menetapkan otorisasi atau autentikasi untuk semua situs, edit globalIis seperti dalam contoh berikut. Untuk menetapkan otorisasi atau autentikasi untuk situs tertentu, edit elemen situs.

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

Dengan keterangan:

  • providers menentukan penyedia protokol keamanan Anda.
  • user mencantumkan nama pengguna.
  • access menentukan izin pengguna. Jenis akses adalah kata kerja HTTP (POST, GET, PUT, PATCH, DELETE).
  • role menentukan peran izin tertentu.

Langkah selanjutnya