Istio實現雙向TLS的遷移

2021-12-29 21:14:50 字數 951 閱讀 4052

在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流量,具體使用哪種方式由實際配置決定。再次驗證網路通訊,可以看到所有請求都成功,目前使用的還是明文的方式。

Chrome是如何實現TLS協議的

chromium是如何實現tls協議的 說起tls transport layer security 協議大家可能不是那麼熟悉,但是說起https協議,大家肯定都或多或少聽過。記得之前有個梗,要把伺服器的應用層協議從http切到https,有人說了,加個 s 不就可以了,一句話的事情 實際上我一開始...

TLS握手的OpenSSL實現(深度1)

我們跳過握手的總狀態機和讀寫狀態機,因為我認為那是openssl架構方案的乙個敗筆,邏輯非常的不清晰,是程式設計師思維,而不是正常的邏輯思維。與握手邏輯比較相關的在statem clnt.c和statem srv.c中。分別是客戶端的握手邏輯和服務端的握手邏輯。我們以服務端為重點來分析。乙個簡單的函...

雙向鍊錶的實現

doublelist.cpp 定義控制台應用程式的入口點。雙向鍊錶 include stdafx.h include using namespace std template struct node template class doublelist template doublelist doub...