虛擬主機探索服務 (VHDS)

虛擬主機探索服務 (VHDS) API 是一個可選的 API,Envoy 會呼叫它來動態擷取 虛擬主機。虛擬主機包含一個名稱和一組網域,這些網域會根據傳入請求的主機標頭路由到該虛擬主機。

在 RDS 中,預設情況下,叢集的所有路由都會傳送到網格中的每個 Envoy 執行個體。隨著叢集規模的增長,這會導致擴展問題。大多數的複雜性都可以在虛擬主機組態中找到,其中大多數並非任何單獨的代理所需要。

為了修正這個問題,虛擬主機探索服務 (VHDS) 協定使用 delta xDS 協定,允許訂閱路由組態,並根據需要請求必要的虛擬主機。使用 VHDS 將允許 Envoy 執行個體訂閱和取消訂閱儲存在 xDS 管理伺服器內部的一系列虛擬主機,而不是使用路由組態傳送所有虛擬主機。xDS 管理伺服器將監控此清單,並使用它來篩選傳送到單個 Envoy 執行個體的組態,使其僅包含訂閱的虛擬主機。

虛擬主機資源命名慣例

VHDS 中的虛擬主機由虛擬主機所屬的路由組態名稱以及 HTTP host 標頭 (HTTP2 為:authority) 項目組合來識別。資源應命名如下

<route configuration name>/<host entry>

請注意,比對應從右到左進行,因為主機項目不能包含斜線,而路由組態名稱可以。

訂閱資源

VHDS 允許使用 訂閱,透過 DeltaDiscoveryRequesttype_url 設定為 type.googleapis.com/envoy.config.route.v3.VirtualHost,並將 resource_names_subscribe 設定為它想要組態的虛擬主機資源名稱清單。

如果無法解析主機/授權標頭內容的路由,則在傳送 DeltaDiscoveryRequest 時,活動串流會暫停。當收到 DeltaDiscoveryResponse 時,其中一個 aliases 或回應中的 nameresource_names_subscribe 項目的 DeltaDiscoveryRequest 完全比對時,路由組態會更新,串流會繼續,並且繼續處理過濾器鏈。

虛擬主機的更新會以兩種方式發生。如果虛擬主機最初是透過 RDS 傳送的,則虛擬主機應透過 RDS 更新。如果虛擬主機是透過 VHDS 訂閱的,則更新將透過 VHDS 進行。

當路由組態項目更新時,如果 vhds 欄位 已變更,則該路由組態的虛擬主機表會被清除,這將需要再次傳送所有虛擬主機。

與範圍 RDS 的相容性

VHDS 不應與 範圍 RDS 存在任何相容性問題。路由組態名稱仍然可以用於虛擬主機比對,但是如果設定了範圍 RDS,它將指向範圍路由組態。

但是,必須注意的是,一起使用隨需 範圍 RDS 和 VHDS 將需要每個路由範圍有兩個隨需訂閱。

統計資訊

VHDS 有一個統計樹,其根位於 http.<stat_prefix>.vhds.<virtual_host_name>.。在統計樹中,virtual_host_name 名稱中的任何 : 字元都會被 _ 取代。統計樹包含以下統計資訊

名稱

類型

描述

config_reload

計數器

由於組態不同而導致組態重新載入的 API 擷取總數

empty_update

計數器

收到的空更新總計數