監聽器
Envoy 設定在單一進程中支援任意數量的監聽器。一般而言,我們建議每台機器執行單一 Envoy,無論設定的監聽器數量有多少。這樣可以更輕鬆地進行操作,並且擁有單一的統計來源。
TCP
每個監聽器都獨立設定 filter_chains,其中個別的 filter_chain 是根據其 filter_chain_match 標準選取的。
個別的 filter_chain 由一個或多個網路層級 (L3/L4) 的 過濾器 組成。
當在監聽器上接收到新的連線時,會選取適當的 filter_chain,並且會實例化設定的連線本地過濾器堆疊,並開始處理後續事件。
通用監聽器架構用於執行 Envoy 所使用的絕大多數不同代理任務(例如,速率限制、TLS 用戶端驗證、HTTP 連線管理、MongoDB 嗅探、原始 TCP 代理 等)。
監聽器也可以選擇性地設定一些 監聽器過濾器。這些過濾器會在網路層級過濾器之前處理,並且有機會操作連線中繼資料,通常是為了影響後續過濾器或叢集如何處理連線。
監聽器也可以透過 監聽器探索服務 (LDS) 動態擷取。
UDP
Envoy 也支援 UDP 監聽器,特別是 UDP 監聽器過濾器。
每個工作執行緒會實例化一次 UDP 監聽器過濾器,並且該過濾器對於該工作執行緒是全域的。
每個監聽器過濾器都會處理工作執行緒在連接埠上接收到的每個 UDP 資料報。
實際上,UDP 監聽器會設定 SO_REUSEPORT
核心選項,這會導致核心將每個 UDP 4 元組一致地雜湊到同一個工作執行緒。如果需要,這允許 UDP 監聽器過濾器具有「工作階段」導向性。此功能的一個內建範例是 UDP 代理 監聽器過濾器。