התאמה אישית של תוכנית העברה לשירותי Windows IIS
בודקים את קובץ תוכנית ההעברה שאוכלס במהלך יצירת ההעברה. אפשר להתאים אישית את ההגדרות לפני שממשיכים להפעלת המיגרציה. פרטי תוכנית ההעברה משמשים לחילוץ ארטיפקטים של מאגר עומסי העבודה מהמכונה הווירטואלית של המקור.
בקטע הזה מוסבר על התוכן של תוכנית ההעברה ועל סוגי ההתאמות האישיות שכדאי לשקול לפני שמבצעים את ההעברה ויוצרים את ארטיפקטים הפריסה.
לפני שמתחילים
במסמך הזה אנחנו מניחים שכבר יצרתם תוכנית העברה ושברשותכם קובץ תוכנית ההעברה שנוצר.
המבנה של תוכנית ההעברה
בהמשך מופיע המבנה המלא של תוכנית המיגרציה. בקטעים הבאים נסביר על המבנה הזה, מה כל חלק אומר ואיך אפשר לשנות אותו.
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 מתוארות דרישות בסיסיות ל-pods שמריצים אתרים של IIS מהמכונה הווירטואלית הזו. במהלך תהליך הגילוי, המערכת מחפשת הגדרות כלליות במכונה הווירטואלית של המקור, ומשתמשת בהן כדי לאכלס את הקטע הזה. ההגדרות האלה כוללות שדות שמופיעים בהגדרות התמונה הספציפיות, כמו שמתואר בקטע הבא, והן משפיעות על כל התמונות בו-זמנית.
החלק image
בקטע image אחרי globalSettings מפורטת רשימה של תכונות של Windows שצריך להתקין בפודים. במהלך תהליך הגילוי, המערכת מאכלסת את הקטע הזה בכל התכונות של Windows שקיימות במכונה הווירטואלית המקורית, ואפשר להתקין אותן במאגר Windows.
החלק msvcRuntimes
כשמעבירים אפליקציה, יכול להיות שיש לה תלות בגרסה ספציפית או בגרסאות ספציפיות של Microsoft Visual C++ Runtime (MSVCRT). הכלי Migrate to Containers מזהה באופן אוטומטי את סביבות זמן הריצה שמותקנות במכונה הווירטואלית של המקור וכולל אותן בתוכנית ההעברה.
אפשר לשנות את רשימת סביבות זמן הריצה בתוכנית המיגרציה על ידי הוספה או הסרה של חברים ב-msvcRuntimes:
הרשימה המלאה של הערכים האפשריים: (זמן הריצה של 2015 כולל גם תמיכה ב-2017, ב-2019 וב-2022)
msvcRuntimes:
- MSVC2012_x64
- MSVC2013_x64
- MSVC2015_x64
- MSVC2012_x86
- MSVC2013_x86
- MSVC2015_x86
החלק pathEnvVarAdditionalEntries
יכול להיות שבאפליקציות Windows IIS יש רשומות של משתנה הסביבה PATH שאינן ברירת מחדל. המערכת מזהה אותן באופן אוטומטי במכונה הווירטואלית של המקור וכוללת אותן בתוכנית ההעברה. אפשר לשנות את משתני הסביבה PATH על ידי עריכת הרכיבים של pathEnvVarAdditionalEntries:
pathEnvVarAdditionalEntries:
- "C:\\myDllsFolder"
- "C:\\ProgramData\\SomeSoftware"
עריכת קטע התמונה
כדאי לערוך את הקטע image במקרים הבאים:
יכול להיות שחלק מהתכונות המוצעות לא נדרשות באתרים שהועברו. זה קורה אם למכונה הווירטואלית של המקור יש שימושים אחרים חוץ מאירוח אתרים של IIS.
שיניתם את הקטעים של IIS בתוכנית ההעברה והוספתם הגדרות שתלויות בתכונות נוספות של Windows. (לדוגמה, אימות Windows תלוי בתכונת האימות של Windows).
החלק target
בקטע target מצוין באיזו תמונת בסיס של Windows אתם משתמשים (לדוגמה, 1909). בדרך כלל לא צריך לערוך את השדה הזה.
החלק images
כל פריט משנה בקטע images מציין תמונה אחת של פלט.
ב-zip של הארטיפקטים, לכל קובץ אימג' כזה יש ספריית משנה נפרדת, עם קובץ Dockerfile וקובץ deployment_spec.yaml משלה (ראו פריסת קובץ אימג' של הקונטיינר).
השדה name
בשדה name מתואר שם התמונה.
הוא משפיע על השם של ספריית המשנה של התמונה ועל הקובץ deployment_spec.yaml
בארטיפקטים.
השדה probes
השדה probes מתאר את ההגדרה של בדיקת תקינות התמונה. מידע נוסף על בדיקות kubelet זמין במאמר הגדרת בדיקות של פעילות, מוכנות והפעלה.
עריכה של בדיקות תקינות ב-IIS
בדיקות תקינות יכולות לעקוב אחרי זמני ההשבתה והסטטוס של הקונטיינרים המנוהלים. מעקב באמצעות בדיקת תקינות יכול לעזור לצמצם את זמן ההשבתה של קונטיינרים שהועברו ולספק מעקב טוב יותר.
מצבי תקינות לא ידועים עלולים לגרום לירידה בזמינות, לזמינות חיובית כוזבת ולפוטנציאל לאובדן נתונים. בלי בדיקת תקינות, kubelet יכול רק להניח מה מצב התקינות של קונטיינר, ויכול להיות שהוא ישלח תנועה למופע של קונטיינר שלא מוכן. אם המופע לא מוכן, יכול להיות שתהיה אובדן תנועה. יכול להיות ש-Kubelet לא יזהה קונטיינרים שנמצאים במצב קפוא ולא יפעיל אותם מחדש.
בדיקת תקינות פועלת על ידי הפעלת הצהרה קטנה מתוך סקריפט כשהקונטיינר מתחיל לפעול. הסקריפט בודק אם התנאים מתקיימים בכל תקופה. התנאים מוגדרים לפי סוג הבדיקה שבה נעשה שימוש. התקופה מוגדרת בשדה periodSeconds בתוכנית ההעברה. אפשר להגדיר את הבדיקות האלה באופן ידני כשמתאימים אישית את תוכנית ההעברה.
אפשר להגדיר שלושה סוגים של בדיקות. כל הבדיקות הן בדיקות ליבה בגרסה 1, שמוגדרות בהפניה לבדיקות ליבה בגרסה 1, והן חולקות את אותה פונקציה כמו השדות התואמים של מאגר ליבה בגרסה 1.
*בדיקת מצב פעילות (liveness): בדיקות מצב פעילות (liveness) משמשות כדי לדעת מתי להפעיל מחדש קונטיינר.
בקשה לבדיקת תקינות (probe) מוכנות: בקשות לבדיקת תקינות (probe) מוכנות משמשות כדי לדעת מתי קונטיינר מוכן להתחיל לקבל תנועה. כדי להתחיל לשלוח תנועה ל-Pod רק אחרי שבדיקת מוכנות מצליחה, צריך לציין בדיקת מוכנות. בקשה לבדיקת תקינות מוכנות עשויה לפעול באופן דומה לבקשה לבדיקת תקינות מצב פעילות. עם זאת, בקשה לבדיקת תקינות (probe) מציינת שתרמיל מתחיל בלי לקבל תנועה, ומתחיל לקבל תנועה רק אחרי שהבקשה לבדיקת תקינות (probe) מצליחה.
בדיקת מוכנות להפעלה: kubelet משתמש בבדיקות מוכנות להפעלה כדי לדעת מתי אפליקציית קונטיינר התחילה לפעול. אם מוגדרת בקשה לבדיקת תקינות (probe) כזו, היא משביתה את בדיקות מצב פעילות (liveness) והמוכנות עד שהיא מצליחה, כדי לוודא שהבדיקות האלה לא יפריעו להפעלת האפליקציה.
אחרי הגילוי, הגדרת הבדיקה מתווספת לתוכנית המיגרציה. אפשר להשתמש בבדיקות בהגדרת ברירת המחדל שלהן, כמו בדוגמה הבאה. ההגדרה שמוגדרת כברירת מחדל משתמשת בפקודה exec לבדיקות מצב הפעילות והמוכנות. שניהם משתמשים בסקריפט PowerShell שנקרא probe.ps1, שקורא לכלי שורת הפקודה של IIS appcmd כדי לבדוק את הסטטוס של אתרי IIS.
הבדיקות מושבתות כברירת מחדל. כדי להפעיל אותן, צריך להגדיר את הדגל 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 שנוצרו במהלך הפעלת העברה ועוקבים אחרי שירות IIS יחיד של Windows. עם זאת, יכול להיות שעומסי עבודה מסוימים ידרשו הפעלה של שירותים נוספים (כולל מסד נתונים, מנגנון רישום, שרת proxy ועוד) כדי לפעול בצורה תקינה.
כדי להריץ שירותים נוספים במאגר שהועבר, מוסיפים רשומות לקטע 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 ...
הנתיבים שצוינו עבור currentcontrolset ו-software הם נתיבים למפתחות בHKEY_LOCAL_MACHINE\System\CurrentControlSet Registry Hive או ב-HKEY_LOCAL_MACHINE\Software Registry Hive.
עריכת הקטע useractions
כברירת מחדל, הקבצים היחידים שמועתקים לתמונה הם הספריות הווירטואליות של אתרים בתמונה שצוינה.
אם הקוד או ההגדרות מייבאים קבצים מחוץ לספרייה הזו, צריך להוסיף אותם לקטע useractions.
בנוסף, צריך להוסיף את כל ערכי הרישום שהקוד תלוי בהם על ידי עריכה של הקטע useractions registry.
הגדרות שקשורות ספציפית ל-IIS
ההגדרות שקשורות ל-IIS מחולקות להגדרות שקשורות לאתרים ספציפיים, שהן חלק ממפרט התמונה, ולהגדרות שקשורות לכל האתרים, שמופיעות בקטע gloabalIis.
החלק sites
בקטע אתרים מתוארים האתרים שמועברים לתמונה ספציפית. יכול להיות שכמה תמונות יכילו את אותו אתר.
אם רוצים להשתמש ב-Cloud Load Balancing, ב-Ingress או ב-Cloud Service Mesh כדי לטפל בהגדרת ה-SSL, צריך להגדיר את protocol ל-http:
sites: site: - applications: - path: / virtualdirectories: - path: / physicalpath: '%SystemDrive%\inetpub\wwwroot' bindings: - port: 8080 protocol: http name: Default Web Site
החלק apppools
בקטע apppools מתואר מאגר האפליקציות שנוצר בתרמילים שהועברו.
בשדה identitytype מציינים את זהות IIS של מאגר אפליקציות כאחת מהאפשרויות הבאות: ApplicationPoolIdentity (ברירת מחדל), NetworkService, LocalSystem או LocalService.
מידע נוסף זמין במאמרים הסבר על זהויות ב-IIS וזהויות של מאגרי אפליקציות.
דוגמה לתוכנית העברה שכוללת את 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 מוסיף באופן אוטומטי את ההוראות הנדרשות של Dockerfile בהתאם להגדרת השדה identitytype.
לדוגמה, אם מגדירים את identitytype ל-NetworkService, ההנחיה תהיה בפורמט:
RUN c:\windows\system32\inetsrv\appcmd.exe set apppool \"DefaultAppPool\" \"/-processModel.identityType:NetworkService\";הכלי Migrate to Containers מוסיף באופן אוטומטי הנחיות ACL לקריאה לתיקיות של האתר בהתאם לidentitytype היעד, ולמשתמש המובנה IUSR.
הפעולה הזו מתבצעת באופן אוטומטי עבור פריטים במערכת הקבצים של האפליקציה, אם חשבון האפליקציה המקורי צוין בירושה או באופן מפורש.
מידע נוסף מופיע במאמר בנושא הגדרת רשימות ACL.
השדה enablegmsa
השדה enablegmsa הוא סוכר תחבירי בתוכנית ההעברה. זוהי קיצור דרך להחלפת השדה זהות של מאגר האפליקציות.
הערכים הנתמכים בשדה enablegmsa הם:
-
auto(ברירת מחדל): המערכת תמיר את מאגר התגים שהועבר לשימוש ב-gMSA אם הכלי Migrate to Containers יקבע שההגדרה הנוכחית שלו לא מותרת. -
all: המערכת תמיד תמיר את הקונטיינר שהועבר לשימוש ב-gMSA ותתעלם מההגדרה שלidentitytype. במקרה כזה, הערךidentitytypeתמיד יפורש כערךNetworkService.
דוגמה לתוכנית העברה שכוללת את enablegmsa:
migrationPlan: applications: iis: # Allowed values include: auto (default), all enablegmsa: auto|all
מידע נוסף זמין במאמר הגדרת האפליקציה לשימוש בחשבון gMSA.
מחרוזות חיבור
מחרוזות חיבור מגדירות חיבור מעומס העבודה של הקונטיינר שהועבר לספק נתונים של .NET Framework.
הכלי 'העברה אל 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מציין באופן אופציונלי את סוג ספק הנתונים. הכלי 'העברה לקונטיינרים' תומך רק בערךSystem.Data.SqlClient. תומך בספק הנתונים של .NET Framework:System.Data.SqlClientSystem.Data.OleDbSystem.Data.OdbcSystem.Data.OracleClient
-
connectionstringמציין את מחרוזות החיבור שמשמשות לחיבור לספק הנתונים.
עריכת הקטעים של מחרוזות החיבור
הכלי Migrate to Containers מעתיק אוטומטית את מחרוזות החיבור שזוהו במכונה הווירטואלית שהועברה לתוכנית ההעברה.
יכול להיות שחלק ממחרוזות החיבור לא יזוהו, ולכן צריך להוסיף אותן על ידי עריכת תוכנית ההעברה כמו שמוצג למעלה. (לדוגמה, אם מחרוזות החיבור נמצאות בקטע מוצפן בקובץ applicationhost.config).
במאמר Retrieving Connection Strings at Run Time במסמכי התיעוד של מיקרוסופט יש הוראות לקביעת מחרוזות החיבור שצריך להוסיף לתוכנית ההעברה.
Connection string external dependencies
- מחרוזות חיבור יכולות להכיל תלויות, כמו הפניה לקובץ או למשתמש Windows שמשויך לאתר. אתם יכולים להוסיף פעולות משתמש בהתאמה אישית לתוכנית ההעברה כדי להעתיק קובץ נוסף במערכת הקבצים. עורכים ידנית את קובץ Docker כדי להוסיף משתמש Windows.
- מחרוזות חיבור יכולות להכיל תלויות, כמו הפניה למקור נתונים חיצוני. כדי לוודא שלעומס העבודה של מאגר התגים שהועבר תהיה גישה למקור הנתונים, צריך להעביר את התלות האלה באופן ידני.
החלק 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מציין תפקיד הרשאה ספציפי.