傳輸層安全性 (TLS
)
此範例逐步說明如何設定 Envoy 以利用透過 TLS
的加密連線來使用 HTTP
。
它展示了一些常用的代理和 TLS
終止模式
https
->http
https
->https
http
->https
https
直通
為了更好地了解提供的範例,以及有關如何使用 Envoy 配置 TLS
的說明,請參閱保護 Envoy 快速入門指南。
警告
為了簡單起見,此處提供的範例不會驗證任何用戶端憑證,也不會驗證任何提供的憑證。
使用 TLS
時,強烈建議您在任何可能的情況下驗證所有憑證。
在您控制連線的兩端,或者可以使用相關協定時,您也應該驗證用戶端。
步驟 1:建立沙箱
將目錄變更為 Envoy 儲存庫中的 examples/tls
。
這會啟動四個監聽 localhost
連接埠 10000-10003
的代理。
它還會啟動兩個上游服務,一個是 HTTP
,另一個是 HTTPS
,它們以 json
格式回傳收到的標頭。
上游服務分別在 80
和 443
連接埠上的內部 Docker 網路中監聽。
$ pwd
envoy/examples/tls
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------
tls_proxy-https-to-http_1 /docker-entrypoint.sh /usr ... Up 0.0.0.0:10000->10000/tcp
tls_proxy-https-to-https_1 /docker-entrypoint.sh /usr ... Up 0.0.0.0:10001->10000/tcp
tls_proxy-http-to-https_1 /docker-entrypoint.sh /usr ... Up 0.0.0.0:10002->10000/tcp
tls_proxy-https-passthrough_1 /docker-entrypoint.sh /usr ... Up 0.0.0.0:10003->10000/tcp
tls_service-http_1 node ./index.js Up
tls_service-https_1 node ./index.js Up
步驟 2:測試代理 https
-> http
監聽 https://127.0.0.1:10000 的 Envoy 代理會終止 HTTPS
並代理到上游 HTTP
服務。
https -> http 設定
會將 TLS
transport_socket新增至監聽器。
查詢連接埠 10000
上的服務時,您應該會看到已新增 https
的 x-forwarded-proto
標頭
$ curl -sk https://127.0.0.1:10000 | jq -r '.headers["x-forwarded-proto"]'
https
上游 service-http
處理請求。
$ curl -sk https://127.0.0.1:10000 | jq -r '.os.hostname'
service-http
步驟 3:測試代理 https
-> https
監聽 https://127.0.0.1:10001 的 Envoy 代理會終止 HTTPS
並代理到上游 HTTPS
服務。
https -> https 設定
會將 TLS
transport_socket新增至監聽器和叢集。
查詢連接埠 10001
上的服務時,您應該會看到已新增 https
的 x-forwarded-proto
標頭
$ curl -sk https://127.0.0.1:10001 | jq -r '.headers["x-forwarded-proto"]'
https
上游 service-https
處理請求。
$ curl -sk https://127.0.0.1:10001 | jq -r '.os.hostname'
service-https
步驟 4:測試代理 http
-> https
監聽 https://127.0.0.1:10002 的 Envoy 代理會終止 HTTP
並代理到上游 HTTPS
服務。
http -> https 設定
會將 TLS
transport_socket新增至叢集。
查詢連接埠 10002
上的服務時,您應該會看到已新增 http
的 x-forwarded-proto
標頭
$ curl -s https://127.0.0.1:10002 | jq -r '.headers["x-forwarded-proto"]'
http
上游 service-https
處理請求。
$ curl -s https://127.0.0.1:10002 | jq -r '.os.hostname'
service-https
步驟 5:測試代理 https
直通
監聽 https://127.0.0.1:10003 的 Envoy 代理會直接代理到上游 HTTPS
服務,該服務會執行 TLS
終止。
https 直通 設定
不需要任何 TLS
或 HTTP
設定,而是使用簡單的tcp_proxy。
查詢連接埠 10003
上的服務時,您應該會看到沒有新增 x-forwarded-proto
標頭
$ curl -sk https://127.0.0.1:10003 | jq -r '.headers["x-forwarded-proto"]'
null
上游 service-https
處理請求。
$ curl -sk https://127.0.0.1:10003 | jq -r '.os.hostname'
service-https
另請參閱
- 保護 Envoy 快速入門指南
保護 Envoy 的主要概念概述。
- TLS SNI 沙箱
使用 Envoy 來服務受 TLS 保護並從相同
IP
位址服務的多個網域的範例。- 雙重代理沙箱
使用
mTLS
以及非HTTP
流量,透過驗證和相互驗證來保護代理之間流量的範例。