準備要部署的 Windows 叢集
本頁說明如何準備 Windows 叢集以便部署。
事前準備
- 完成遷移作業,並產生產生的構件。
- 建立要部署工作負載的叢集。詳情請參閱「建立 Windows 叢集」
- 設定
kubectl
並連線至叢集。
選擇並設定 Docker 登錄檔
在部署過程中,您會建構容器的 Docker 映像檔,並上傳至 Docker 登錄。
您可以選擇使用 Docker 登錄檔:
Artifact Registry
任何支援基本驗證的 Docker 登錄檔
建議的解決方案是在部署叢集的相同專案中使用 Artifact Registry。根據預設,GKE 可以存取登錄檔。詳情請參閱與 GKE 整合的相關規定。
如果您想使用私人 Docker 登錄檔,請瞭解如何設定登錄檔。
設定遷移的工作負載,以便使用 gMSA
Windows IIS 應用程式工作負載通常會加入 Active Directory (AD),並使用網域身分運作。將這些 VM 遷移至容器時,容器本身並未加入網域,但其主機 Kubernetes 叢集節點可以加入網域。
將已遷移的容器部署至叢集時,您可以使用群組管理服務帳戶 (gMSA)。使用 gMSA 在特定服務帳戶身分中執行容器。您可以在 Kubernetes 叢集中附加 gMSA,做為 Pod 設定的一部分,而非容器映像檔中的靜態身分設定。
Migrate to Containers 可協助您轉換工作負載。Migrate to Containers 會自動偵測 IIS 應用程式集區的設定,並在產生的遷移計畫中加入建議。接著,您可以評估這些建議,並根據特定環境和需求進行修改。
如果「遷移至容器」判斷應用程式集區的設定不需要 gMSA,就會保留原始應用程式集區設定。例如,使用內建帳戶類型 (例如 ApplicationPoolIdentity
、NetworkService
、LocalSystem
或 LocalService
) 時。
如要在已遷移的 Windows 容器中支援 gMSA,您必須:
編輯遷移計畫,設定必要的屬性,以便將遷移的容器設定為使用 gMSA。
設定目標叢集以支援 gMSA
您可以在 Kubernetes 叢集中附加 gMSA,做為 Pod 設定的一部分,而非在容器映像檔中做為靜態身分設定。
如要設定代管已遷移 Windows 容器的叢集,以便支援 gMSA,您必須具備下列項目:
如要瞭解詳情,請參考下列資源:
- 為 Windows 容器建立 gMSA。
- 建立群組代管服務帳戶。
- Google Cloud 說明文件中的使用 gMSA。
- 請參閱 Microsoft 說明文件,設定應用程式使用 gMSA。
將 SSL 憑證儲存為 Kubernetes 密鑰時部署容器
建議您使用 Cloud Load Balancing、Ingress 或 Cloud Service Mesh 做為 HTTPS 前端,以確保外部存取已部署的容器。這個選項可讓您保護外部通訊,而不需要在叢集中加入任何憑證。詳情請參閱「自訂遷移計畫」。
您也可以將安全資料傳輸層 (SSL) 憑證儲存為 Kubernetes 密鑰,並在執行階段將其掛接至容器。
如要使用 Kubernetes 密鑰,請按照下列步驟操作:
使用憑證和密碼建立 PFX 檔案。
建立定義網站存取權的設定 YAML 檔案:
sites: - sitename: "sitename" sslport: 443 pfxpath: c:\sslconfig\pfx password: "password" thumbprint: "3e858d0551fc0536f52d411dad92b680a4fad4da"
其中:
sitename
可指定已設定為使用 SSL 的網站名稱。sites
屬性可包含多個sitename
項目。sslport
可指定要監聽 SSL 連線的通訊埠 (通常為 443)。pfxpath
會指定 PFX 檔案的路徑。將其設為 Pod 部署作業的volumeMounts
一部分。password
會指定 PFX 檔案的密碼。thumbprint
會指定 PFX 檔案的 SHA-1 指紋,可透過 PowerShell 指令擷取:Get-PfxCertificate -FilePath "path to pfx"
或在 Windows 憑證管理工具中查看。
建立 Kubernetes 密鑰:
kubectl create secret generic secret-name --from-file=pfx=path-to-pfx --from-file=config=path-to-config
在映像檔部署中建立磁碟區和磁碟區掛接:
apiVersion: v1 kind: Pod metadata: name: iis-pod labels: app: iis-server-simple spec: nodeSelector: kubernetes.io/os: windows containers: - name: iis-server image: your-image-url volumeMounts: - name: ssl-secret mountPath: c:\sslconfig env: - name: M4A_CERT_YAML value: c:\sslconfig\config volumes: - name: ssl-secret secret: secretName: secret-name
其中:
mountPath
與您在步驟 2 建立的設定檔中pfxpath
指定的路徑相同。M4A_CERT_YAML
是環境變數,設為您在步驟 2 中建立的設定 YAML 檔案的完整路徑。secret-name
是您在步驟 3 中建立的秘密名稱。
設定安全資料傳輸層
建議您不要將 SSL 憑證私密金鑰儲存在容器映像檔中,因為任何讀取映像檔的使用者都能存取這些金鑰。遷移至容器功能提供多種處理 Windows 的 SSL 方式。
使用自行簽署的自動產生憑證
根據預設,具有 HTTPS 繫結的 Windows 容器會指派自行簽署的自動產生憑證,該憑證是在 Docker 容器初始化時產生。這項設定可讓您測試已遷移的工作負載,但無法用於實際工作環境。憑證會自行簽署,並在每次執行容器時重新產生。
建議使用 Cloud Load Balancing、Ingress 或 Cloud Service Mesh
您可以自訂遷移計畫中的繫結,以便使用 HTTP。接著,使用 Cloud Load Balancing、Ingress 或 Cloud Service Mesh 做為 HTTPS 前端,以便保護外部存取權。這個選項可讓您保護外部通訊,而不需要在叢集中加入任何憑證。
如要自訂繫結,請編輯遷移計畫中的
site
定義,代表將protocol
設為http
:sites: site: - applications: - path: / virtualdirectories: - path: / physicalpath: '%SystemDrive%\inetpub\wwwroot' bindings: - port: 8080 protocol: http name: Default Web Site
接著,您可以將 HTTPS 前端的請求轉送至 Windows 工作負載的 HTTP 路徑和連接埠。
將 SSL 憑證儲存為 Kubernetes 密鑰
建議您使用 Cloud Load Balancing、Ingress 或 Cloud Service Mesh 做為 HTTPS 前端,以確保外部存取權。不過,您也可以將 SSL 憑證儲存為 Kubernetes 密鑰,並在執行階段將其掛接到容器。
如要使用儲存為 Kubernetes 機密的 SSL 憑證,您必須編輯容器的部署映像檔。詳情請參閱「將 SSL 憑證儲存為 Kubernetes 密鑰時部署容器」。
設定 Cloud Logging 的記錄功能
Migrate to Containers 會使用 LogMonitor 工具,從 Windows 容器中擷取記錄,並轉送至 GKE 叢集。這些記錄會自動轉送至 Cloud Logging,後者提供一套工具來監控容器。
根據預設,「遷移至容器」會啟用 IIS 記錄功能,以便監控 IIS 記錄,並將應用程式或系統事件記錄轉送至 Cloud Logging。
設定記錄功能
展開產生的 artifacts.zip
檔案會建立多個目錄,包括 m4a
目錄。這個目錄包含每張圖片的資料夾。m4a
目錄中包含 LogMonitorConfig.json
檔案,您可以編輯該檔案來控制記錄功能。
如要進一步瞭解如何編輯 LogMonitorConfig.json
,請參閱「撰寫設定檔」。
設定 ACL
某些 IIS 應用程式需要您為檔案和資料夾設定特定存取控制清單 (ACL) 權限,才能正確執行應用程式。「Migrate to Containers」會自動掃描所有已遷移的 IIS 應用程式,並新增來源 VM 中定義的任何特定權限,這些權限適用於 IIS 帳戶 (IUSR
帳戶和 IIS_IUSRS
群組),並套用至產生的容器映像檔中複製的檔案和目錄。
由於 Windows 容器映像檔不支援將 ACL 設為 Docker COPY
指令的一部分,因此會在名為 set_acls.bat
的指令碼中設定 ACL。Migrate to Containers 會自動為特定 Windows 應用程式產生的映像檔目錄中建立 set_acls.bat
。當您執行 docker build
指令時,Migrate to Containers 會呼叫 set_acls.bat
。
編輯 set_acls.bat
來新增或移除自訂權限,或編輯與特定 IIS 使用者無關,因此未遭「遷移至容器」偵測到的權限。
指令碼會使用 Windows 內建的 icacls 工具設定權限。
關於 .NET 全域組合快取
Migrate to Containers 會掃描來源映像檔的 .NET 全域組合快取 (GAC),找出在來源機器上安裝的 .NET 資源,這些資源無法在官方映像檔中使用。任何偵測到的 DLL 都會複製到 Docker 情境中,並由公用程式指令碼 install_gac.ps1
在建構目標映像檔時一併安裝。
所有 .NET 組件都會複製到 m4a\gac
目錄下的 Docker 上下文。如要從映像檔中移除組件,請從 m4a\gac
目錄中刪除這些組件。
註冊 COM 物件 DLL
會公開 COM 物件的 DLL 會自動掃描及註冊。在擷取階段期間,系統會掃描複製的檔案,找出已註冊為 COM 物件的 DLL,然後將這些 DLL 註冊到容器中。
這項程序會在沒有使用者輸入的情況下進行。不過,您可以透過新增更多要複製的 DLL 來影響這個程序。如有需要,系統會依序檢查並註冊這些 DLL。