虛擬主機探索服務 (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 允許使用 訂閱,透過 DeltaDiscoveryRequest 將 type_url 設定為 type.googleapis.com/envoy.config.route.v3.VirtualHost
,並將 resource_names_subscribe 設定為它想要組態的虛擬主機資源名稱清單。
如果無法解析主機/授權標頭內容的路由,則在傳送 DeltaDiscoveryRequest 時,活動串流會暫停。當收到 DeltaDiscoveryResponse 時,其中一個 aliases 或回應中的 name 與 resource_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 |
計數器 |
收到的空更新總計數 |