準備要部署的 Windows 叢集

本頁說明如何準備 Windows 叢集以便部署。

事前準備

選擇並設定 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,就會保留原始應用程式集區設定。例如,使用內建帳戶類型 (例如 ApplicationPoolIdentityNetworkServiceLocalSystemLocalService) 時。

如要在已遷移的 Windows 容器中支援 gMSA,您必須:

  1. 編輯遷移計畫,設定必要的屬性,以便將遷移的容器設定為使用 gMSA。

  2. 設定代管已部署容器的目標叢集

設定目標叢集以支援 gMSA

您可以在 Kubernetes 叢集中附加 gMSA,做為 Pod 設定的一部分,而非在容器映像檔中做為靜態身分設定。

如要設定代管已遷移 Windows 容器的叢集,以便支援 gMSA,您必須具備下列項目:

  1. 為 VM 設定 Active Directory,讓 VM 自動加入網域

  2. 為 Windows Pod 和容器設定 gMSA

如要瞭解詳情,請參考下列資源:

將 SSL 憑證儲存為 Kubernetes 密鑰時部署容器

建議您使用 Cloud Load BalancingIngressCloud Service Mesh 做為 HTTPS 前端,以確保外部存取已部署的容器。這個選項可讓您保護外部通訊,而不需要在叢集中加入任何憑證。詳情請參閱「自訂遷移計畫」。

您也可以將安全資料傳輸層 (SSL) 憑證儲存為 Kubernetes 密鑰,並在執行階段將其掛接至容器。

如要使用 Kubernetes 密鑰,請按照下列步驟操作:

  1. 使用憑證和密碼建立 PFX 檔案

  2. 建立定義網站存取權的設定 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 憑證管理工具中查看。

  3. 建立 Kubernetes 密鑰:

    kubectl create secret generic secret-name --from-file=pfx=path-to-pfx --from-file=config=path-to-config
  4. 在映像檔部署中建立磁碟區和磁碟區掛接:

    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 BalancingIngressCloud 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 BalancingIngressCloud 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。

後續步驟