Keycloak 和 Istio

2018年2月26日 Sébastien Blanc

這篇簡短的部落格文章旨在分享 Keycloak 與 Istio 結合的首次試驗。

什麼是 Istio?

Istio 是一個平台,提供管理服務網格的通用方法。您可能會想知道什麼是服務網格,嗯,它是一個專門用於連接、保護和提高不同服務可靠性的基礎設施層。

最終,Istio 將取代我們所有的斷路器、智能負載平衡或指標函式庫,以及兩個服務之間以安全方式進行通信的方式。當然,這對 Keycloak 來說是很有趣的部分。

如您所知,Keycloak 為其保護的每個應用程式或服務使用適配器。這些適配器確保在需要時執行重新導向、檢索公鑰、驗證 JWT 簽名等...

根據所使用的應用程式或技術類型,有許多不同的適配器:有 Java EE 適配器、JavaScript 適配器,甚至還有 NodeJS 適配器。

適配器的終結?

根據 Istio 的理念,最終將不再需要這些適配器,因為 Istio 基礎設施將負責適配器所執行的任務(簽名驗證等...)。目前我們還沒有達到這個階段,但在這篇文章中,我們將看看 Istio 已經可以做到什麼,以及它已經可以在多大程度上取代適配器的角色。

Envoy Sidecar

我們不會深入探討 Istio 的運作細節,但有一個主要概念需要理解,Istio 就是圍繞這個概念來構建的:Envoy Sidecar。Envoy 是一個高性能代理,與每個部署的服務一起部署,這也是我們稱之為「邊車」的原因。

Envoy 會捕獲其「夥伴」服務的所有傳入和傳出流量,然後它可以應用一些基本操作,並收集數據並將其發送到中央決策點,在 Istio 中稱為「mixer」。Envoy 本身的配置是通過「pilot」這個另一個 Istio 組件進行的。

Envoy 篩選器

為了更容易地向 Envoy Proxy 添加新功能,有一個您可以堆疊的篩選器概念。同樣,這些篩選器可以由 Pilot 配置,它們可以為 Mixer 收集資訊

JWT-Auth 篩選器

Istio 團隊一直在開發一個我們感興趣的篩選器:jwt-auth 篩選器。顧名思義,此篩選器能夠對 Envoy Proxy 將從 HTTP 請求標頭中提取的 JWT 令牌執行檢查。

有關此篩選器的詳細資訊,請參閱這裡

Keycloak-Istio 演示

現在您已經了解了大致情況,讓我們來看看由 Red Hat 開發人員體驗團隊的 Kamesh Sampath (@kamesh_sampath) 開發的演示,以展示如何結合 Keycloak 和 Istio

該演示將在 Minishift 實例中運行,Minishift 是一個有助於在本地運行 OpenShift 的工具。Minishift 對 Istio 有非常好的支持,因為只需要幾個命令就可以在 Minishift 實例中安裝 Istio 層。

因此,在我們的 Minishift 實例中,我們將擁有

演示儲存庫提供了 Istio 腳本,用於將 Envoy Sidecar 與 Spring Boot Api 服務一起部署。

這是在部署後 Cars API Pod 的樣子

現在,需要配置 Envoy Sidecar

現在,Envoy Sidecar 將檢查每個對 API 服務的傳入請求,以查看標頭中包含的 JWT 令牌是否有效。如果有效,則授權請求,否則將返回錯誤訊息。

完整的演示說明(包括使用 Istio 設定 Minishift)可以在這裡找到,再次感謝出色的 Kamesh 為此演示所做的工作。