本文档简要介绍了客户机代理的核心功能,它是客户机环境的关键组件。访客环境包含实例在 Compute Engine 上运行所需的脚本、守护程序和二进制文件。如需了解详情,请参阅客机环境。
客机代理的工作原理
从版本 20250901.00
开始,访客代理使用基于插件的架构。此设计将代理的功能分离为不同的组件,从而提高可靠性和灵活性。
Guest Agent 架构包含以下几个关键组件:
- Guest agent manager:实例上用于启动、停止和监控所有插件的中央进程。
- 核心插件:此插件处理实例在 Google Cloud上运行所需的基本服务。其功能无法停用。
- 可选插件:这些插件可将您的实例与其他 Google Cloud 服务(例如 Cloud Monitoring)集成。您可以控制哪些插件在实例上运行。
- 代理控制平面:这是在 Google 后端基础设施上运行的托管式 Google Cloud 服务,用于管理可选插件的生命周期,包括其安装和更新。
如需详细了解客户机代理架构,请参阅关于客户机代理。
核心功能
核心插件负责实例在 Compute Engine 上运行所需的基本服务。以下部分详细介绍了核心插件提供的功能。您可以使用客户机代理配置文件自定义其中的许多功能。
初始实例设置和优化
访客代理会执行多项设置任务,以准备好实例在 Compute Engine 上运行。如下表所示,有些任务仅在首次启动时运行,而其他任务则在每次启动时运行。
任务 | 频率 |
---|---|
生成 SSH 主机密钥 | 首次启动时 |
创建用于使用 Cloud Storage 的 boto 配置 |
首次启动时 |
针对本地 SSD 进行优化 | 每次启动时 |
在所有 virtionet 设备上启用多队列 |
每次启动时 |
您可以通过配置客户机代理配置文件的 InstanceSetup
选项来控制这些设置任务。例如,您可以通过设置 optimize_local_ssd = false
来停用本地 SSD 优化。
系统遥测数据收集
客户机代理会在启动时记录一些基本系统遥测信息,然后每 24 小时记录一次。记录的信息包括以下内容:
- 客机代理版本和架构
- 操作系统名称和版本
- 操作系统内核版本和版本
您可以通过将元数据键 disable-guest-telemetry
设置为 true
来停用遥测数据收集。如需设置元数据,请参阅设置和移除自定义元数据。
时钟同步(仅限 Linux)
为确保计时准确,guest 代理会使用 clock_skew_daemon
组件定期校正实例上的时钟,使其与运行该实例的物理服务器保持一致。此过程可防止出现称为时钟偏移的问题,并在实例日志中生成 system time has changed
消息,以确认时间已成功同步。
代理通常会在停止或启动事件后或迁移后同步时钟。
您可以在客户机代理配置文件中设置 clock_skew_daemon = false
,以停用 clock_skew_daemon
组件。
元数据脚本执行
您可以使用启动脚本和关停脚本,让实例在每次启动或停止时执行自动化任务。
客机代理可帮助运行这些脚本,具体如下:
- 在 shell 中执行脚本。
- 如果您指定了多个脚本(例如,同时使用
startup-script
和startup-script-url
),代理会同时运行这两个脚本。 - 如果为同一事件提供了多个脚本,代理会先执行来自网址的脚本。
- 脚本完成后,代理会记录其退出状态。
您可以通过修改客机代理配置文件中的 MetadataScripts
选项来配置元数据脚本的执行。
用户账号和 SSH 密钥管理
Guest 代理使用 accounts_daemon
管理本地用户账号和 SSH 密钥,这些账号和密钥控制着对实例的访问权限。具体行为因 Linux 和 Windows 操作系统而异。
您可以通过在客机代理配置文件中配置 Accounts
选项来修改账号管理选项。
Linux
OS Login 用于通过 IAM 管理对实例的 SSH 访问权限,而无需创建和管理单独的 SSH 密钥。如需详细了解 OS Login,请参阅 OS Login。 在 Linux 实例上,如果未启用 OS Login,代理会使用元数据设置创建和管理本地用户账号及其 SSH 密钥。
当您从实例或项目元数据中添加或移除 SSH 密钥时,客机代理会创建或删除本地用户账号。为了管理这些本地用户账号,客户代理还会执行以下操作:
- 为每个受管理的账号维护
authorized_keys
文件,如下所示:- 当您将 SSH 密钥添加到元数据时,代理会为用户账号创建一个
authorized_keys
文件。 - 从元数据中移除用户的所有 SSH 密钥后,代理会删除相应用户账号的
authorized_keys
文件。
- 当您将 SSH 密钥添加到元数据时,代理会为用户账号创建一个
- 通过使用
google-sudoers
Linux 群组来管理管理员权限。 此群组的任何成员都会获得实例的 sudo 权限。 - 将它配置的所有用户账号添加到
google-sudoers
群组。 - 将用户账号添加到您在 guest 代理配置文件的
groups
选项中指定的任何其他 Linux 群组。
Windows
在 Windows 实例上,代理会自动为元数据 SSH 密钥中指定的任何 SSH 用户账号创建本地用户账号(在实例级或项目级)。访客代理还会处理创建用户账号以及设置或重置密码。使用 SSH 连接到 Windows 实例需要这些本地用户账号。
您可以通过在 AD 控制器实例上停用账号管理器来防止意外的 AD 用户预配。如需详细了解如何在 Compute Engine 上设置 AD,请参阅部署网域控制器。
OS Login 配置(仅限 Linux)
OS Login 用于通过 IAM 管理对实例的 SSH 访问权限,而无需创建和管理单独的 SSH 密钥。如需详细了解 OS Login,请参阅 OS Login 文档。
当您启用 OS Login 时,guest 代理负责配置实例以使用 OS Login。
客机代理通过完成以下任务来配置 OS Login:
- 向
SSHD
配置文件添加 Google 配置块,并重启SSHD
。 - 向
nsswitch.conf
文件添加 OS Login 条目。 - 向
SSHD
的PAM
配置文件添加了 OS Login 条目。
如果您停用 OS Login,系统会移除配置更改。SSHD
配置文件 Accounts
部分下的选项不适用于 OS Login 用户。
网络管理
客户机代理会在启动时自动配置实例的网络接口。它会从元数据服务器读取网络配置,以确保您的实例正确连接到网络,并可以访问其他 Google Cloud服务。
您可以通过在客户机代理配置文件中配置 NetworkInterfaces
选项来控制代理的网络管理行为。例如,您可以设置 manage_primary_nic = true
选项,让代理除了管理次要 NIC 之外,还管理主要网络接口卡 (NIC)。
每次启动时,guest 代理都会执行以下关键任务:
- 启用网络接口:代理会检测操作系统上的活跃网络管理器,并使用该管理器启用所有辅助网络 NIC。
- 配置 IP 路由:代理会为 IP 转发和别名 IP 范围等功能设置必要的 IP(仅限 IPv4)路由,如下所示:
- 在主以太网接口上设置路由。
- 默认配置 Google 路由,路由协议 ID 为
66
。此 ID 是为配置的客户代理 IP 地址设置的命名空间。您可以使用 guest 代理配置文件中的ethernet_proto_id
选项更改此 ID。
- 创建通往元数据服务器的路由:代理可确保主网卡始终能够与元数据服务器通信,以获取实例信息。
- VLAN 配置:如果您的实例配置为连接到虚拟局域网 (VLAN),则 Guest 代理会自动处理设置。它会从元数据服务器读取 VLAN 配置,并配置实例内的网络接口以使用正确的 VLAN 标记。这样可确保实例在预期的逻辑网络上进行通信。重要的是,如果 VLAN 连接到主网卡,即使
manage_primary_nic
已停用,客户机代理也会对其进行配置。
网络管理器选择
在 Linux 上,客户机代理会自动检测系统上可用的网络管理器,并使用该管理器来配置网络接口。代理会按优先级顺序(从 netplan
到 dhclient
)检查受支持的管理器。
下表列出了支持的网络管理器,并按其默认情况下最常关联的操作系统进行了整理。您的具体实例配置可能有所不同,但下表反映了所列操作系统的默认网络管理器。
网络管理器 | 操作系统 | 配置位置 | 路径示例 | 备注 |
---|---|---|---|---|
netplan |
|
/run/netplan/ |
/run/netplan/20-google-guest-agent-eth0.yaml |
代理还可能会使用 /etc/systemd/network/ 中的投放位置 |
wicked |
|
/etc/sysconfig/network/ |
/etc/sysconfig/network/ifcfg-eth0 |
系统不会覆盖现有的 ifcfg 文件,而是跳过这些文件。 |
NetworkManager |
|
/etc/NetworkManager/system-connections/ |
/etc/NetworkManager/system-connections/google-guest-agent-eth0.nmconnection |
|
systemd-networkd |
|
/usr/lib/systemd/network/ |
/usr/lib/systemd/network/20-eth0-google-guest-agent.network |
|
dhclient |
|
/run/ |
/run/dhclient.google-guest-agent.eth0.ipv4.pid |
如果未检测到任何其他网络管理器,guest 代理会默认使用 dhclient 。 |
安全的元数据服务器 (MDS) 凭据管理
安全强化型虚拟机现在支持使用 HTTPS 端点 https://metadata.google.internal/computeMetadata/v1
与元数据服务器进行安全通信。此增强功能可提供更安全的元数据访问渠道。
为了实现这种安全通信,guest 代理会在实例的磁盘上检索并存储必要的凭据。这些凭据会保存在标准位置,因此实例上运行的任何客户端应用都可以访问它们。如需查看这些位置,请参阅证书存储位置。
默认情况下,HTTPS MDS 证书的设置处于停用状态。如需让 Shielded VM 自动设置 HTTPS MDS 证书,请将实例或项目中的 disable-https-mds-setup
元数据键设置为 false
。如需设置元数据,请参阅设置和移除自定义元数据。
由 guest 代理进行的凭据管理包括:
- 初始更新:每当客户代理进程启动时,系统都会更新根证书和客户端凭据。
- 自动刷新:为了提高安全性,访客代理每 48 小时会自动刷新一次客户端凭据。
- 重叠期:代理生成并保存新凭据,同时旧凭据保持有效。重叠期可确保客户有足够的时间在旧凭据过期之前过渡到新凭据。此重叠期还允许代理在凭据获取失败时重试,确保在现有凭据失效之前获得有效凭据。
- 组成:guest 代理确保客户端凭据由 EC(椭圆曲线)私钥与客户端证书串联而成。
- 唯一性:客户代理可确保凭据对于实例而言是唯一的,并且无法在其他位置使用。
如需详细了解 HTTPS 元数据服务器端点,请参阅HTTPS 元数据服务器端点简介。
默认情况下,guest 代理直接将证书写入磁盘。不过,您可以配置代理,以将证书集成到操作系统的内置证书存储区中。如需启用此集成,请将 enable-https-mds-native-cert-store
元数据键设置为 true
。如需设置元数据,请参阅设置和移除自定义元数据。
代理向操作系统信任库添加证书的行为因操作系统而异,如下所示:
Linux
客户代理执行以下步骤:
- 将 MDS 根证书添加到系统的信任库。具体路径取决于操作系统分发版本。如需查看这些位置,请参阅操作系统受信任证书存储区中的根证书存储。
- 通过运行适合相应操作系统的命令(例如
update-ca-certificates
或update-ca-trust
)来更新本地信任库。
Windows
代理会将客户端凭据添加到 Cert:\LocalMachine\My
,并将根证书添加到 Cert:\LocalMachine\Root
。
Windows 故障切换集群支持(仅限 Windows)
客户机代理会监控 Windows Server 故障切换集群中的活跃节点,并与 Google Cloud 内部负载平衡器协调,以将所有集群流量转发到预期节点。
您可以使用实例元数据或 instance_configs.cfg
文件中的以下字段来控制此行为:
enable-wsfc
:设置为true
时,代理会忽略所有 IP 转发信息,并开始响应健康检查端口。默认设置为false
。wsfc-agent-port
:指定代理响应健康检查的端口。默认设置为59998
。wsfc-addrs
:以英文逗号分隔的 IP 地址列表。借助此高级设置,您可以在同一实例上同时拥有常规转发 IP 和集群 IP。设置此参数后,代理只会跳过此列表中 IP 的自动配置。默认情况下,此值未设置。
后续步骤
- 如需了解如何管理客户机代理,请参阅配置客户机代理