idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸

衆所周知,HTTPS是用來解決 HTTP 明文協議的缺陷,在 HTTP 的基礎上加入 SSL/TLS 協議,依靠 SSL 證書來驗證服務器的身份,爲客戶端和服務器端之間建立“SSL”通道,確保數據運輸安全。而Istio的雙向TLS也用來保證數據傳輸安全。那麼,Istio的雙向TLS是如何與HTTPS服務一起工作的呢?

下面通過實例演示Istio的雙向TLS是如何與HTTPS服務一起工作的,包括三個部分:

• 在沒有 Istio sidecar 的情況下部署 HTTPS 服務

• 關閉 Istio 雙向 TLS 認證情況下部署 HTTPS 服務

• 部署一個啓動雙向 TLS 的 HTTPS 服務。對於每個部署,請求連接到此服務並驗證其是否有效。

環境準備

• 未啓用雙向TLS的安裝了Istio的k8s集羣

• 安裝openssl,生成證書和configmap

通過openssl生成key和證書:

idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸

從給定的公私鑰對創建TLS secret:

idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸

使用kubectl創建Configmap:

idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸

1.沒有部署sidecar

創建一個不部署sidecar的基於nginx的HTTPS服務,並創建一個部署sidecar的sleep應用來調度nginx

idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸

idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸

檢查上述pod是否正常運行

idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸

在pod正常運行時,從sleep應用的istio-proxy容器內訪問HTTPS服務:

idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸

可以看到,nginx能正常訪問。

  1. 部署sidecar並禁用雙向TLS

刪除上一步創建的未部署sidecar的HTTPS服務,並用sidecar部署它

idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸

查看pod是否正常啓動:

idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸

在pod正常運行時,從istio-proxy容器運行,可以看到,nginx能正常訪問:

idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸

  1. 部署sidecar,並啓用雙向TLS

通過配置網格級別的認證策略啓用全局雙向TLS,首先配置網格認證策略:

idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸

配置目的地規則:

idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸

此時,網格中的所有服務已經開啓了雙向TLS功能,從sleep容器中訪問nginx是正常的:

idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸

從sleep容器中訪問時,工作流爲“sleep→sleep-proxy→nginx-proxy→nginx” ,此時,整個過程是7層流量,在sleep-proxy到nginx-proxy之間有一個L4雙向TLS加密。

而在istio-proxy中運行時,它無法工作:

idou老師教你學Istio 17 : 通過HTTPS進行雙向TLS傳輸

此時,工作流爲“sleep-proxy→nginx-proxy→nginx”,nginx-proxy會從sleep-proxy中獲得雙向TLS流量,但是sleep-proxy無法提供客戶端證書,因此,它不起作用。

總結:通過上述演示,可以瞭解到,當istio sidecar使用HTTPS服務部署時,無論是否啓用雙向TLS功能,代理自動從L7降到L4,所以,它不會終止原來的HTTPS通信。
相關服務請訪問https://support.huaweicloud.com/cce/index.html?cce_helpcenter_2019

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章