Istio Ambient 模式 HBONE 隧道原理詳解

語言: CN / TW / HK

Istio ambient 模式採用了被稱為HBONE 的方式來連線 ztunnel 和 waypoint proxy。HBONE 是 HTTP-Based Overlay Network Environment 的縮寫。簡單地說,ambient 模式採用了 HTTP CONNECT 方法 在 ztunnel 和 waypoint proxy 建立了一個隧道,通過該隧道來傳輸資料。本文將分析 HBONE 的實現機制和原理。

HTTP 隧道原理

建立 HTTP 隧道的常見形式是採用 HTTP 協議的 CONNECT 方法。在這種機制下,客戶端首先向 HTTP 代理伺服器傳送一個 HTTP CONNECT 請求,請求中攜帶需要連線的目的伺服器。代理伺服器根據該請求代表客戶端連線目的伺服器。和目的伺服器建立連線後,代理伺服器將客戶端 TCP 資料流直接透明地傳送給目的伺服器。在這種方式中,只有初始連線請求是 HTTP,之後代理伺服器處理的是 TCP 資料流。

通過這種方法,我們可以採用 HTTP CONNECT 建立一個隧道,該隧道中可以傳輸任何型別的 TCP 資料。

例如在一個內網環境中,我們只允許通過 HTTP 代理來訪問外部的 web 伺服器。但我們可以通過 HTTP 隧道的方式來連線到一個外部的 SSH 伺服器上。。

客戶端連線到代理伺服器,傳送 HTTP CONNECT 請求通過和指定主機的 22 埠建立隧道。

CONNECT for.bar.com:22 HTTP/1.1

如果代理允許連線,並且代理已連線到指定的主機,則代理將返回2XX成功響應。

HTTP/1.1 200 OK

現在客戶端將通過代理訪問遠端主機。 傳送到代理伺服器的所有資料都將原封不動地轉發到遠端主機。

客戶端和伺服器開始 SSH 通訊。

SSH-2.0-OpenSSH_4.3\r\n
... ggg

備註:除了 HTTP CONNECT 以外,採用 HTTP GET 和 POST 也可以建立 HTTP 隧道,這種方式建立的隧道的原理是將 TCP 資料封裝到 HTTP 資料包中傳送到外部伺服器,該外部伺服器會提取並執行客戶端的原始網路請求。外部伺服器收到此請求的響應後,將其重新打包為HTTP響應,併發送回客戶端。在這種方式中,客戶端所有流量都封裝在 HTTP GET 或者 POST 請求中。

Envoy 的 internal listener 機制

參考資料