创建和管理 Windows Server 实例

Compute Engine 提供 Windows Server 的公共映像,您可以使用这些映像来创建实例。如需了解如何创建预装了 SQL Server 的 Windows Server 实例,请参阅创建 SQL Server 实例

如需更广泛地了解可以在 Compute Engine 上运行的 Windows Server 实例和 Windows 应用,请参阅在 Compute Engine 上使用 Windows

准备工作

创建 Windows Server 实例

如需创建 Windows Server 实例,请指定所需的特定 Windows 版本的映像系列。Compute Engine 提供了多个 Windows Server 版本,其中的大多数版本都同时以常规映像和安全强化型虚拟机映像的形式提供。安全强化型虚拟机映像提供多种安全功能,例如符合 UEFI 标准的固件、安全启动和受 vTPM 保护的测量启动等。如果为实例选择 SSD 存储,则无法使用安全强化型虚拟机的完整性监控功能,也无法使用 vTPM 防护数据。如需可用映像系列的列表,请参阅公共映像

创建使用外部 IP 进行激活的 Windows Server 实例

本部分介绍如何创建具有外部 IP 地址的 Windows Server 实例。您的 VPC 网络必须配置为允许访问 kms.windows.googlecloud.com

创建 Windows Server 实例

控制台

如需创建基本的 Windows 实例,请执行以下操作:

如需创建安全强化型虚拟机 Windows 实例,请执行以下操作:

  1. 转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

  2. 点击创建实例
  3. 启动磁盘部分,点击更改以开始配置您的启动磁盘。
  4. 操作系统映像标签页中,选择一个 Windows 映像。
    选择显示支持安全强化型虚拟机功能的映像,以仅查看安全强化型虚拟机映像。

  5. 点击选择

  6. (可选)更改实例的安全强化型虚拟机设置:

    1. 点击管理安全磁盘网络 (Management Security Disks Networking) 部分的安全标签页。
    2. 若您要停用安全启动,请取消选中开启安全启动。安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。如需了解详情,请参阅安全启动
    3. 若您要停用虚拟可信平台模块 (vTPM),请取消选中开启 vTPM。vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)

    4. 若您要停用完整性监控,请取消选中开启完整性监控。借助完整性监控功能,您可以使用 Stackdriver Monitoring 监控安全强化型虚拟机实例的启动完整性。如需了解详情,请参阅完整性监控

  7. 点击创建以创建实例。

gcloud

使用 compute images list 命令查看可用的 Windows Server 映像列表。

使用以下命令查看可用的非安全强化型虚拟机 Windows Server 映像:

gcloud compute images list --project windows-cloud --no-standard-images

使用以下命令查看可用安全强化型虚拟机映像(包括 Windows 映像)的列表:

gcloud compute images list --project gce-uefi-images --no-standard-images

使用 compute instances create 命令创建新实例,并为其中一个 Windows Server 公开映像指定映像系列。

gcloud compute instances create [INSTANCE_NAME] \
    --image-project windows-cloud \
    --image-family [IMAGE_FAMILY] \
    --machine-type [MACHINE_TYPE] \
    --boot-disk-size [BOOT_DISK_SIZE] \
    --boot-disk-type [BOOT_DISK_TYPE]

其中:

  • [INSTANCE_NAME] 是新实例的名称。
  • [IMAGE_FAMILY] 是 Windows Server 映像的公共映像系列之一。
  • [MACHINE_TYPE] 是可用的机器类型之一。
  • [BOOT_DISK_SIZE] 是启动磁盘的大小(以 GB 为单位)。永久性磁盘越大,吞吐量越高
  • [BOOT_DISK_TYPE] 是您的实例的启动磁盘类型。指定 pd-ssd 以使用较快的 SSD 永久性磁盘,或指定 pd-standard 以使用标准 HDD 永久性磁盘。

如果选择支持安全强化型虚拟机的映像,则可以选择使用以下标志之一更改实例的安全强化型虚拟机设置:

  • --no-shielded-secure-boot:停用安全启动。安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。如需了解详情,请参阅安全启动
  • --no-shielded-vtpm:停用虚拟可信平台模块 (vTPM)。vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)

  • --no-shielded-integrity-monitoring:停用完整性监控。借助完整性监控功能,您可以使用 Stackdriver Monitoring 监控安全强化型虚拟机实例的启动完整性。如需了解详情,请参阅完整性监控

以下示例创建停用了安全启动的 Windows 2012 安全强化型虚拟机实例:

 gcloud compute instances create my-instance \
 --image-family windows-2012-r2 --image-project gce-uefi-images \
 --no-shielded-secure-boot

API

如需使用 API 创建实例,请在实例创建请求中包括 initializeParams 属性并指定 Windows 映像。例如,您的请求正文可能如下所示:

instance = {
  "name": "[INSTANCE_NAME]",
  "machineType": "zones/[ZONE]/machineTypes/[MACHINE_TYPE]",
  "disks": [{
      "boot": "true",
      "type": "PERSISTENT",
      "initializeParams": {
         "diskName": "[DISK_NAME]",
         "sourceImage": "https://compute.googleapis.com/compute/v1/projects/windows-cloud/global/images/family/[IMAGE_FAMILY]",
         "diskSizeGb": "[BOOT_DISK_SIZE]",
         "diskType": "[BOOT_DISK_TYPE]",
       }
    }],
  "networkInterfaces": [{
    "accessConfigs": [{
      "type": "ONE_TO_ONE_NAT",
      "name": "External NAT"
     }],
    "network": "global/networks/default"
  }],
  "serviceAccounts": [{
       "email": DEFAULT_SERVICE_EMAIL,
       "scopes": DEFAULT_SCOPES
  }]
}

其中:

  • [INSTANCE_NAME] 是新实例的名称。
  • [IMAGE_FAMILY] 是 Windows Server 或 SQL Server 映像的公共映像系列之一。
  • [ZONE] 是此实例所在的地区
  • [MACHINE_TYPE] 是可用的机器类型之一。
  • [BOOT_DISK_SIZE] 是启动磁盘的大小(以 GB 为单位)。永久性磁盘越大,吞吐量越高
  • [BOOT_DISK_TYPE] 是您的实例的启动磁盘类型。指定 pd-ssd 以使用较快的 SSD 永久性磁盘,或指定 pd-standard 以使用标准 HDD 永久性磁盘。

如果选择支持安全强化型虚拟机的映像,则可以选择使用以下布尔请求正文项更改实例的安全强化型虚拟机设置:

  • enableSecureBoot:启用或停用安全启动。安全启动功能可帮助保护您的虚拟机实例免受启动级和内核级恶意软件和 rootkit 的攻击。如需了解详情,请参阅安全启动
  • enableVtpm:启用或停用虚拟可信平台模块 (vTPM)。vTPM 将启用测量启动,该功能可验证虚拟机预启动和启动完整性。如需了解详情,请参阅虚拟可信平台模块 (vTPM)

  • enableIntegrityMonitoring:启用或停用完整性监控。借助完整性监控功能,您可以使用 Stackdriver Monitoring 报告监控和验证安全强化型虚拟机实例的运行时启动完整性。如需了解详情,请参阅完整性监控

如需详细了解如何创建实例,请参阅 instances.insert() 文档。

创建 Windows 或 SQL Server 实例后,为该实例设置初始密码,以便通过 RDP 连接该实例

创建使用内部 IP 地址进行激活的 Windows Server 实例

如需创建仅具有内部 IP 地址的 Windows Server 实例,您必须在 VPC 网络中验证或配置路由和防火墙规则,以允许访问 kms.windows.googlecloud.com。此外,您还必须为 VPC 网络中只有内部 IP 地址的 Windows 实例所在的子网启用专用 Google 访问通道

当您使用 gcloud 命令行创建新实例时,可以使用 --no-address 标记来确保它没有分配到外部 IP 地址:

gcloud compute instances create [INSTANCE_NAME] --network [NETWORK_NAME] \
   --subnet [SUBNET_NAME] \
   --no-address \
   --zone [ZONE] \
   --image-project windows-cloud \
   --image-family [IMAGE_FAMILY] \
   --machine-type [MACHINE_TYPE] \
   --boot-disk-size [BOOT_DISK_SIZE] \
   --boot-disk-type [BOOT_DISK_TYPE]

将下列占位符替换为有效值:

  • [INSTANCE_NAME] 是新实例的名称。
  • [SUBNET_NAME] 是 VPC 网络中实例将使用的子网名称。子网必须与您为实例选择的地区位于同一区域。
  • [IMAGE_FAMILY] 是 Windows Server 映像的公共映像系列之一。
  • [MACHINE_TYPE] 是可用的机器类型之一。
  • [BOOT_DISK_SIZE] 是启动磁盘的大小(以 GB 为单位)。永久性磁盘越大,吞吐量越高
  • [BOOT_DISK_TYPE] 是您的实例的启动磁盘类型。指定 pd-ssd 以使用较快的 SSD 永久性磁盘,或指定 pd-standard 以使用标准 HDD 永久性磁盘。

由于此实例没有外部 IP 地址,因此无法直接通过互联网连接该实例。您可以使用 Cloud InterconnectCloud VPN 从已接入您的 VPC 网络的其他网络进行连接,也可以先通过 RDP 连接到堡垒实例,然后再连接到只有内部 IP 地址的实例。

配置对 kms.windows.googlecloud.com 的访问权限

如需激活和续订 Windows,您的 VPC 网络必须满足以下路由和防火墙规则要求。

路由要求

您的 Windows 实例必须能够通过其下一个跃点为默认互联网网关的路由访问 kms.windows.googlecloud.com (35.190.247.13)。您无法使用基于实例的 NAT 网关或 Cloud NAT 激活 Windows 实例,因为 kms.windows.googlecloud.com 拒绝来自未确认为 Compute Engine 实例的 IP 地址的激活请求。

您可以使用 VPC 网络中的默认路由将流量直接路由至 kms.windows.googlecloud.com。如果您要移除此路由或者计划将来进行移除,请创建自定义静态路由,该路由的目的地应为 35.190.247.13 且下一个跃点应设置为“默认互联网网关”

gcloud compute routes create [ROUTE_NAME] \
    --destination-range=35.190.247.13/32 \
    --network=[NETWORK] \
    --next-hop-gateway=default-internet-gateway

[ROUTE_NAME] 替换为此路由的名称,将 [NETWORK] 替换为您的 VPC 网络名称。

如上所述,默认路由或自定义静态路由将允许具有外部 IP 地址的实例访问 kms.windows.googlecloud.com。如果您的 Windows 实例没有外部 IP 地址,您还必须启用专用 Google 访问权限;这样,只有内部 IP 地址的实例才能将流量发送到 kms.windows.googlecloud.com 的外部 IP 地址。该 IP 地址 (35.190.247.13) 包含在 Google API 和服务的 IP 地址列表中。

防火墙规则要求

隐式允许出站防火墙规则允许实例发出请求并接收已建立的响应。除非您创建了拒绝出站的自定义防火墙规则,否则您的 Windows 实例可以与 kms.windows.googlecloud.com 通信。

如需自定义防火墙规则,最好创建一个明确允许与 35.190.247.13 通信的高优先级允许出站规则。这样,在修改防火墙规则时,您不会意外停用 Windows 激活。

以下 gcloud 示例创建了具有最高优先级的建议的允许出站规则:

gcloud compute firewall-rules create [RULE_NAME] \
    --direction=EGRESS \
    --network=[NETWORK] \
    --action=ALLOW \
    --rules=tcp:1688 \
    --destination-ranges=35.190.247.13/32 \
    --priority=0

[RULE_NAME] 替换为此防火墙规则的名称,将 [NETWORK] 替换为您的 VPC 网络名称。

验证实例已成功启动

由于 sysprep 进程,Windows 实例的启动时间较长。即使 sysprep 进程尚未完成,Cloud Console 也可能会显示实例正在运行。如需检查实例是否已成功启动并已准备好使用,请使用以下命令检查串行端口输出:

gcloud compute instances get-serial-port-output [INSTANCE_NAME]

其中,[INSTANCE_NAME] 是您要验证的实例的名称。

...[snip]...
Running schtasks with arguments /run /tn GCEStartup
-->  SUCCESS: Attempted to run the scheduled task "GCEStartup".
-------------------------------------------------------------
Instance setup finished. [INSTANCE_NAME] is ready to use.
-------------------------------------------------------------

停用 Google 提供的组件更新

如果您的 Windows 实例包含映像版本 v20170509 及更高版本,或者包含代理程序版本 4.1.0 及更高版本,系统会使用计划任务自动更新 Google 提供的组件,例如代理、元数据和 sysprep 脚本。计划任务由 google-compute-engine-auto-updater 软件包设置。

如果您想手动管理更新或使用其他系统管理更新,可以通过移除 google-compute-engine-auto-updater 软件包来停用这些自动组件更新:

  1. 在 Windows Server 实例上,以管理员身份打开 PowerShell 终端。
  2. 运行 googet remove 命令以移除该软件包:

    PS C:\\> googet remove google-compute-engine-auto-updater
    

(可选)您可以重新安装此软件包以启用自动组件更新:

  1. 在 Windows Server 实例上,以管理员身份打开 PowerShell 终端。
  2. 运行 googet install 命令安装此软件包:

    PS C:\\> googet install google-compute-engine-auto-updater
    

或者,您可以通过将项目或实例自定义元数据中的 disable-agent-updates 值设置为 true 来停用更新。该元数据值会停用更新,而会不移除软件包或任务。

启用和停用 Windows 实例功能

如果您的 Windows 实例的映像版本为 v20170509 及更高版本,或者代理版本为 4.1.0 及更高版本,则可以在配置文件或项目或实例自定义元数据中设置实例配置。配置文件格式为 INI,位于以下路径:

C:\Program Files\Google\Compute Engine\instance_configs.cfg

系统按照以下优先顺序从最高优先级到最低优先级替换配置设置:

  1. 您在配置文件中设置的配置参数
  2. 在实例级自定义元数据中设置的配置参数
  3. 在项目级自定义元数据中设置的配置参数

例如,如果您可以在配置文件中启用 accountManager 功能,实例即会忽略您在自定义元数据中设置的停用该功能的参数。

在配置文件中设置这些参数的一个好处是,当您为 Windows Server 实例创建自定义映像时,这些设置将保持不变。 实例级自定义元数据的存留时间不会超过实例的生命周期。

您可以按照以下示例停用不同的 Windows 实例功能。

停用帐号管理器,该操作还会停用通过 gcloud 命令行工具重置密码或通过控制台重置密码的功能:

  • 配置文件:

    [accountManager]
    disable=true
    
  • 在自定义元数据中,将元数据中的 disable-account-manager 设置为 true

停用地址管理器:

  • 配置文件条目:

    [addressManager]
    disable=true
    
  • 在自定义元数据中,将元数据中的 disable-address-manager 设置为 true

Windows Server 故障转移集群

启用 Windows Server 故障转移集群代理:

  • 配置文件条目:

    [wsfc]
    enable=true
    
  • 在自定义元数据中,将元数据中的 enable-wsfc 设置为 true

使用多个内部负载平衡器

为故障转移集群指定内部负载平衡实例的 IP 地址。这是一种您无需为专用故障转移集群设置的高级配置。

您通常使用内部负载平衡实例将网络流量一次指向一个虚拟机实例。如果您再添加一个内部负载平衡实例,并且将该故障转移集群虚拟机实例用作负载平衡网站后端的一部分,则您将拥有两个内部负载平衡 IP 地址。如果故障转移集群使用 10.0.0.10 且网站的负载平衡器使用 10.0.0.11,则您必须指定用于故障转移集群的负载平衡器的 IP 地址。这可以明确定义为该集群使用哪个地址,消除歧义。

  • 配置文件条目:

    [wsfc]
    addresses=10.0.0.10
    
  • 在自定义元数据中,将 wsfc-addrs 设置为 10.0.0.10

更改集群代理端口

设置故障转移集群代理端口。默认端口为 59998。只有在要使用其他端口时,才需要指定端口:

  • 配置文件条目:

    [wsfc]
    port=12345
    
  • 在自定义元数据中,将 wsfc-agent-port 设置为端口号。

映像版本说明

较旧的映像不使用配置文件,并且只具有部分功能。介于版本 v20160112 和版本 v20170509 之间的映像版本或介于 3.2.1.04.0.0 之间的 Windows 代理版本要求您使用以下自定义元数据值:

  • 将实例元数据中的 disable-account-manager 设置为 true 即可停用帐号管理器。
  • 将实例元数据中的 disable-address-manager 设置为 true 即可停用地址管理器。

后续步骤