本文件概略說明訪客代理程式的核心功能,這是訪客環境的重要元件。訪客環境包含執行個體在 Compute Engine 上執行時所需的指令碼、精靈和二進位檔。詳情請參閱「訪客環境」。
訪客代理程式的運作方式
從 20250901.00
版開始,客體代理程式會採用外掛程式架構。這項設計將代理程式的功能劃分為不同元件,可提升可靠性和彈性。
客體代理程式架構包含幾個重要元件:
- 訪客代理程式管理員:執行個體上的中央程序,負責啟動、停止及監控所有外掛程式。
- 核心外掛程式:這個外掛程式會處理執行執行個體所需的必要服務 Google Cloud。這項功能無法停用。
- 選用外掛程式:這些外掛程式可將執行個體與其他 Google Cloud 服務整合,例如 Cloud Monitoring。您可以控管要在執行個體上執行的外掛程式。
- 代理程式控制層:這項代管 Google Cloud 服務會在 Google 的後端基礎架構上執行,並管理選用外掛程式的生命週期,包括安裝和更新。
如要進一步瞭解訪客代理程式架構,請參閱「關於訪客代理程式」。
核心功能
核心外掛程式負責提供執行個體在 Compute Engine 上運作所需的基本服務。以下各節將詳細說明核心外掛程式提供的函式。您可以使用客體代理程式設定檔,自訂許多這類功能。
初始執行個體設定和最佳化
訪客代理程式會執行多項設定工作,為在 Compute Engine 上執行執行個體做準備。如下表所示,部分工作只會在第一次啟動時執行,其他工作則會在每次啟動時執行。
工作 | 頻率 |
---|---|
產生安全殼層主機金鑰 | 首次開機 |
建立 boto ,以使用 Cloud Storage |
首次開機 |
針對本機 SSD 進行最佳化 | 每次啟動時 |
在所有 virtionet 裝置上啟用多佇列功能 |
每次啟動時 |
您可以設定訪客代理程式設定檔的 InstanceSetup
選項,控管這些設定工作。舉例來說,您可以設定 optimize_local_ssd = false
來停用本機 SSD 最佳化功能。
收集系統遙測資料
訪客代理程式會在啟動時記錄一些基本系統遙測資訊,之後每 24 小時記錄一次。系統會記錄下列資訊:
- 客體代理程式版本和架構
- 作業系統名稱和版本
- 作業系統核心發布版本和版本
如要停用遙測資料收集功能,請將中繼資料鍵 disable-guest-telemetry
設為 true
。如要設定中繼資料,請參閱「設定及移除自訂中繼資料」。
時鐘同步 (僅限 Linux)
為確保時間準確,訪客代理程式會使用 clock_skew_daemon
元件,定期校正執行個體上的時鐘,使其與執行個體的實體伺服器同步。這個程序可避免時鐘偏差問題,並在執行個體記錄中產生 system time has changed
訊息,確認時間已成功同步。
代理程式通常會在停止或啟動事件後,或是在遷移後同步處理時鐘。
您可以在客體代理程式設定檔中設定 clock_skew_daemon = false
,停用 clock_skew_daemon
元件。
執行中繼資料指令碼
您可以運用開機指令碼和關機指令碼,在每次啟動或停止執行個體時執行自動化工作。
訪客代理程式會協助執行這些指令碼,方式如下:
- 在殼層中執行指令碼。
- 如果您指定多個指令碼 (例如同時使用
startup-script
和startup-script-url
),代理程式會同時執行這兩個指令碼。 - 如果為同一事件提供多個指令碼,代理程式會先執行網址中的指令碼。
- 指令碼完成後,代理程式會記錄其結束狀態。
如要設定中繼資料指令碼的執行方式,請修改客體代理程式設定檔中的 MetadataScripts
選項。
使用者帳戶和 SSH 金鑰管理
客體代理程式會使用 accounts_daemon
管理本機使用者帳戶和 SSH 金鑰,這些帳戶和金鑰會控管執行個體的存取權。具體行為會因 Linux 和 Windows 作業系統而異。
您可以在訪客代理程式設定檔中設定 Accounts
選項,修改帳戶管理選項。
Linux
OS 登入功能可透過 IAM 管理執行個體的 SSH 存取權,不必建立及管理個別的 SSH 金鑰。如要進一步瞭解 OS 登入,請參閱「OS 登入」。 在 Linux 執行個體上,如果未啟用 OS 登入,代理程式會使用中繼資料設定建立及管理本機使用者帳戶和安全殼層金鑰。
當您新增或移除執行個體或專案中繼資料中的安全殼層金鑰時,客體代理程式會建立或刪除本機使用者帳戶。訪客代理程式也會執行下列動作,管理這些本機使用者帳戶:
- 為管理的每個使用者帳戶維護
authorized_keys
檔案,方式如下:- 將安全殼層金鑰新增至中繼資料時,代理程式會為使用者帳戶建立
authorized_keys
檔案。 - 從中繼資料移除使用者的所有 SSH 金鑰後,代理程式會刪除該使用者帳戶的
authorized_keys
檔案。
- 將安全殼層金鑰新增至中繼資料時,代理程式會為使用者帳戶建立
- 使用
google-sudoers
Linux 群組管理員權限。 這個群組的任何成員都會獲得執行個體的 sudo 權限。 - 將所有佈建的使用者帳戶新增至
google-sudoers
群組。 - 將使用者帳戶新增至您在客體代理程式設定檔的
groups
選項中指定的任何其他 Linux 群組。
Windows
在 Windows 執行個體中,代理程式會自動為執行個體或專案層級中繼資料 SSH 金鑰中指定的任何 SSH 使用者帳戶,建立本機使用者帳戶。訪客服務專員也會負責建立使用者帳戶,以及設定或重設密碼。您需要這些本機使用者帳戶,才能使用 SSH 連線至 Windows 執行個體。
如要避免系統意外佈建 AD 使用者,請在 AD 控制器執行個體上停用帳戶管理員。如要進一步瞭解如何在 Compute Engine 上設定 AD,請參閱部署網域控制站。
OS 登入設定 (僅限 Linux)
OS 登入功能可透過 IAM 管理執行個體的 SSH 存取權,不必建立及管理個別的 SSH 金鑰。如要進一步瞭解 OS 登入,請參閱 OS 登入文件。
啟用 OS 登入後,訪客代理程式會負責設定執行個體,以使用 OS 登入。
訪客代理程式會完成下列工作,設定 OS 登入:
- 在
SSHD
設定檔中新增 Google 設定區塊,並重新啟動SSHD
。 - 在
nsswitch.conf
檔案中新增 OS 登入項目。 - 將 OS 登入項目新增至
SSHD
的PAM
設定檔。
停用 OS 登入後,系統會移除設定變更。SSHD
設定檔 Accounts
區段中的選項不適用於 OS 登入使用者。
網路管理
開機時,訪客代理程式會自動設定執行個體的網路介面。 這個代理程式會從中繼資料伺服器讀取網路設定,確保執行個體正確連線至網路,並可存取其他服務。 Google Cloud
如要控管代理程式的網路管理行為,請在客體代理程式設定檔中設定 NetworkInterfaces
選項。舉例來說,您可以設定 manage_primary_nic = true
選項,讓代理程式管理主要網路介面卡 (NIC) 和次要 NIC。
每次開機時,客體代理程式都會執行下列重要工作:
- 啟用網路介面:代理程式會偵測作業系統上的有效網路管理員,並使用該管理員啟用所有次要網路 NIC。
- 設定 IP 路徑:代理程式會為 IP 轉送和別名 IP 範圍等功能設定必要的 IP (僅限 IPv4) 路徑,如下所示:
- 在主要乙太網路介面上設定路徑。
- 預設會設定 Google 路徑,並使用路徑通訊協定 ID
66
。這個 ID 是為設定的訪客代理程式 IP 位址所用的命名空間。如要變更這個 ID,請使用訪客代理程式設定檔中的ethernet_proto_id
選項。
- 建立中繼資料伺服器的路徑:代理程式會確保主要 NIC 隨時可與中繼資料伺服器通訊,以取得執行個體資訊。
- VLAN 設定:如果執行個體已設定為連線至虛擬區域網路 (VLAN),客層代理程式會自動處理設定。這個指令會從中繼資料伺服器讀取 VLAN 設定,並在執行個體內設定網路介面,以使用正確的 VLAN 標記。確保執行個體在預期的邏輯網路上通訊。重要事項:如果 VLAN 連結至主要 NIC,即使
manage_primary_nic
已停用,訪客代理程式仍會設定該 VLAN。
選取電視網管理工具
在 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 |
如果系統未偵測到其他網路管理員,訪客代理程式預設會使用 dhclient 。 |
安全地管理中繼資料伺服器 (MDS) 憑證
安全防護 VM 現在支援使用 HTTPS 端點 https://metadata.google.internal/computeMetadata/v1
與中繼資料伺服器進行安全通訊。這項強化功能可提供更安全的管道來存取中繼資料。
如要啟用這項安全通訊功能,客體代理程式會擷取並儲存執行個體磁碟上的必要憑證。這些憑證會儲存在標準位置,執行個體上執行的任何用戶端應用程式都能存取。如要查看這些位置,請參閱「憑證儲存位置」。
系統預設會停用 HTTPS MDS 憑證設定。如要讓 Shielded VM 自動設定 HTTPS MDS 憑證,請在執行個體或專案中將 disable-https-mds-setup
中繼資料鍵設為 false
。如要設定中繼資料,請參閱「設定及移除自訂中繼資料」。
訪客代理程式的憑證管理功能包括:
- 初始更新:只要啟動訪客代理程式程序,系統就會更新根憑證和用戶端憑證。
- 自動重新整理:為提升安全性,訪客代理程式每 48 小時會自動重新整理用戶端憑證。
- 重疊期:代理程式會產生並儲存新憑證,舊憑證則維持有效。重疊期可確保舊憑證到期前,客戶有足夠時間轉換至新憑證。這段重疊期也讓代理程式在憑證擷取失敗時重試,確保現有憑證失效前,系統已備妥有效憑證。
- 組成:訪客代理程式會確保用戶端憑證包含 EC (橢圓曲線) 私密金鑰,並與用戶端憑證串連。
- 專屬性:訪客代理程式會確保憑證專屬於執行個體,且無法用於其他位置。
如要進一步瞭解 HTTPS 中繼資料伺服器端點,請參閱「關於 HTTPS 中繼資料伺服器端點」。
根據預設,客體代理程式會直接將憑證寫入磁碟。不過,您可以設定代理程式,將憑證整合到作業系統的內建憑證存放區。如要啟用這項整合功能,請將 enable-https-mds-native-cert-store
中繼資料鍵設為 true
。如要設定中繼資料,請參閱「設定及移除自訂中繼資料」。
代理程式將憑證新增至 OS 信任存放區的行為因 OS 而異,如下所示:
Linux
訪客代理程式會執行下列步驟:
- 將 MDS 根憑證新增至系統的信任儲存庫。具體路徑取決於 OS 發行版本。如要查看這些位置,請參閱「作業系統信任存放區中的根憑證儲存空間」。
- 請為作業系統執行適當的指令 (例如
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 的自動設定。根據預設,這個值不會設定。
後續步驟
- 如要瞭解如何管理訪客代理程式,請參閱「設定訪客代理程式」。