idou老師教你學Istio 15:Istio實現雙向TLS的遷移
在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名稱空間下沒有認證策略和目標規則。
下面開始通過配置服務端和客戶端來升級傳輸過程:
- 配置伺服器
向服務端注入以下策略:
上圖策略中,模式為PERMISSIVE,這個模式讓伺服器能夠同時接收明文和雙向TLS流量,具體使用哪種方式由實際配置決定。再次驗證網路通訊,可以看到所有請求都成功,目前使用的還是明文的方式。
- 配置客戶端
通過設定下圖所示DestinationRule,為服務端新增目的地規則:
這些規則生效後,客戶端sleep.foo 和 sleep.bar 就會開始使用雙向 TLS 和 httpbin.foo 進行通訊了,而sleep.legacy因為沒有注入sidecar,因此不受DestinationRule 配置影響,還是使用明文來和httpbin.foo通訊。
通過傳送請求驗證上述分析,可以看到三個應用都訪問成功:
- 鎖定使用雙向TLS(可選)
通過上述方式,可以把不同的客戶端和服務端之間流量都遷移到雙向TLS。當系統中的流量都遷移完畢,並且希望所有應用之間都通過雙向TLS進行安全傳輸,我們可以將應用間的傳輸鎖定為雙向TLS。具體操作方式如下:將配置的認證策略mtls的模式修改為STRICT,這樣,服務端就只執行使用雙向TLS這一種方式接收流量。
鎖定之後,再發送請求驗證通訊,可以看到,sleep.legacy 的請求失敗,這是因為sleep.legacy沒有注入sidecar,無法進行雙向TLS傳輸。
總結:通過上述演示,可以瞭解到,將服務通訊從明文流量傳輸遷移到雙向TLS傳輸的過程是十分方便的,可以根據服務的實際需求按需配置,不會對服務的正常通訊產生任何影響。