1. 程式人生 > >idou老師教你學Istio 15:Istio實現雙向TLS的遷移

idou老師教你學Istio 15:Istio實現雙向TLS的遷移

http 正常 -i 網絡 itl rul istio sleep 啟用

在Istio中,雙向TLS是傳輸身份驗證的完整堆棧解決方案,它為每個服務提供可跨集群的強大身份、保護服務到服務通信和最終用戶到服務通信,以及提供密鑰管理系統。本文闡述如何在不中斷通信的情況下,把現存Istio服務的流量從明文升級為雙向TLS。

使用場景

在部署了Istio的集群中,使用人員剛開始可能更關註功能性,服務之間的通信配置的都是明文傳輸,當功能逐漸完善,開始關註安全性,部署有sidecar的服務需要使用雙向TLS進行安全傳輸,但服務不能中斷,這時,一個可取的方式就是進行雙向TLS的遷移。

下面通過實例演示如何進行雙向TLS的遷移。

環境準備

? 已經部署好Istio的集群,沒有啟用雙向TLS

? 創建三個命名空間,分別是 foo、bar 以及 legacy

? 在 foo、bar 中分別部署註入 Istio sidecar 的 httpbin 以及 sleep 應用,在legacy中部署未註入sidecar的sleep應用

檢查部署情況

技術分享圖片

可以看到,從任意一個命名空間選一個sleep應用,發送http請求到httpbin.foo,都能請求成功。這個時候,使用的是明文傳輸。

檢查系統中的認證策略和目標規則:

技術分享圖片

可以看到,系統中在foo、bar 以及 legacy命名空間下沒有認證策略和目標規則。

下面開始通過配置服務端和客戶端來升級傳輸過程:

1. 配置服務器

向服務端註入以下策略:

技術分享圖片

上圖策略中,模式為PERMISSIVE,這個模式讓服務器能夠同時接收明文和雙向TLS流量,具體使用哪種方式由實際配置決定。再次驗證網絡通信,可以看到所有請求都成功,目前使用的還是明文的方式。

技術分享圖片

2. 配置客戶端

通過設置下圖所示DestinationRule,為服務端添加目的地規則:

技術分享圖片

這些規則生效後,客戶端sleep.foo 和 sleep.bar 就會開始使用雙向 TLS 和 httpbin.foo 進行通信了,而sleep.legacy因為沒有註入sidecar,因此不受DestinationRule 配置影響,還是使用明文來和httpbin.foo通信。

通過發送請求驗證上述分析,可以看到三個應用都訪問成功:

技術分享圖片

3. 鎖定使用雙向TLS(可選)

通過上述方式,可以把不同的客戶端和服務端之間流量都遷移到雙向TLS。當系統中的流量都遷移完畢,並且希望所有應用之間都通過雙向TLS進行安全傳輸,我們可以將應用間的傳輸鎖定為雙向TLS。具體操作方式如下:將配置的認證策略mtls的模式修改為STRICT,這樣,服務端就只運行使用雙向TLS這一種方式接收流量。

技術分享圖片

鎖定之後,再發送請求驗證通信,可以看到,sleep.legacy 的請求失敗,這是因為sleep.legacy沒有註入sidecar,無法進行雙向TLS傳輸。

技術分享圖片

總結:通過上述演示,可以了解到,將服務通信從明文流量傳輸遷移到雙向TLS傳輸的過程是十分方便的,可以根據服務的實際需求按需配置,不會對服務的正常通信產生任何影響。

相關服務請訪問https://support.huaweicloud.com/cce/index.html?cce_helpcenter_2019

idou老師教你學Istio 15:Istio實現雙向TLS的遷移