Menyesuaikan rencana migrasi untuk layanan Windows IIS

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

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

Sebelum memulai

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

Struktur paket migrasi

Berikut ini adalah struktur paket migrasi lengkap. Bagian berikutnya membahas struktur ini, menjelaskan setiap bagian tersebut, dan cara memodifikasinya.

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 gambar tertentu seperti dijelaskan di bagian berikut, dan memengaruhi semua gambar 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 mungkin memiliki dependensi pada versi atau versi tertentu Microsoft Visual C++ Runtime (MSVCRT). Migrate to Containers akan 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 kemungkinan nilai 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 secara otomatis terdeteksi di VM sumber dan disertakan dalam paket migrasi. Anda dapat mengubah variabel lingkungan PATH dengan mengedit anggota pathEnvVarAdditionalEntries:

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

Edit bagian gambar

Anda mungkin perlu 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 mengubah bagian IIS pada rencana migrasi, dan menambahkan konfigurasi yang bergantung pada fitur Windows tambahan. (Misalnya, autentikasi Windows bergantung pada fitur autentikasi Window).

Bagian target

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

Bagian images

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

Kolom name

Kolom name mendeskripsikan nama gambar. Atribut ini memengaruhi nama subdirektori gambar dan file deployment_spec.yaml di artefak.

Kolom probes

Kolom probes menjelaskan konfigurasi pemeriksaan kesehatan gambar. Untuk mempelajari lebih lanjut pemeriksaan kubelet, lihat Mengonfigurasi Pemeriksaan Keaktifan, Kesiapan, dan Startup.

Edit pemeriksaan kesehatan IIS

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

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

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

Ada tiga jenis probe yang tersedia untuk dikonfigurasi. Semua pemeriksaan adalah inti v1 yang ditentukan dalam referensi inti pemeriksaan v1 dan berbagi fungsi yang sama dengan kolom inti container v1 yang sesuai.

  • *Pemeriksaan kehidupan: 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 ketika pemeriksaan berhasil, tentukan kesiapan. Pemeriksaan kesiapan mungkin bertindak serupa dengan pemeriksaan keaktifan. Namun, pemeriksaan kesiapan menunjukkan bahwa pod dimulai tanpa menerima traffic dan hanya mulai menerima traffic setelah pemeriksaan berhasil.

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

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

Pemeriksaan dinonaktifkan secara default. Untuk mengaktifkan pemeriksaan, 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 workload mungkin memerlukan pengoperasian layanan tambahan (termasuk database, mekanisme logging, proxy, dan lainnya) agar dapat berfungsi dengan benar.

Untuk menjalankan layanan tambahan di penampung yang dimigrasikan, tambahkan entri ke bagian windowsServices, lalu 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 untuk kunci di hive registry HKEY_LOCAL_MACHINE\System\CurrentControlSet atau di hive registry HKEY_LOCAL_MACHINE\Software.

Edit bagian useractions

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

Setelan terkait IIS dibagi ke dalam setelan yang terkait dengan situs tertentu, yang merupakan bagian dari spesifikasi gambar, dan setelan yang terkait dengan semua situs, yang mengikuti bagian gloabalIis.

Bagian sites

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

Jika ingin menggunakan Cloud Load Balancing, Ingress, atau Anthos 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 Kumpulan Aplikasi yang dibuat di pod yang dimigrasikan.

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

Untuk informasi selengkapnya, lihat Memahami identitas di IIS dan Identitas Kumpulan Aplikasi.

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 container, Migrate to Containers secara otomatis menambahkan perintah Dockerfile yang diperlukan sesuai dengan setelan kolom identitytype.

Misalnya, jika Anda menetapkan identitytype ke NetworkService, perintahnya akan berbentuk:

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

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

Untuk informasi lebih lanjut, lihat Menetapkan ACL.

Kolom enablegmsa

Kolom enablegmsa adalah sugar sintaksis dalam rencana migrasi. Ini adalah pintasan untuk menimpa kolom identitas dari 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 konversi penampung yang dimigrasikan untuk menggunakan gMSA dan abaikan setelan identitytype. Dalam hal ini, identitytype selalu diinterpretasikan 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 beban kerja container yang dimigrasikan ke penyedia data .NET Framework.

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

Untuk menambahkan string koneksi ke situs, edit definisi site dalam paket 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 langsung mengikuti 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 secara otomatis menyalin string koneksi yang terdeteksi pada VM yang dimigrasikan ke rencana migrasi.

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

Untuk panduan dalam menentukan string koneksi mana yang akan ditambahkan ke paket migrasi, baca artikel 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 tersebut. 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 {i>security<i} berisi subbagian otentikasi dan otorisasi.

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

Serupa dengan string koneksi, untuk menetapkan otorisasi atau autentikasi bagi semua situs, edit globalIis seperti pada 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 spesies nama pengguna.
  • access menentukan izin pengguna. Jenis akses adalah kata kerja HTTP (POST, GET, PUT, PATCH, DELETE).
  • role spesies dengan peran izin khusus.

Langkah selanjutnya