Istio 1.0 於北京時間8月1日0點正式發佈!雖然比本來官網公佈的發佈時間晚了9個小時,但這並未影響到Istio在社區的熱度。git
Istio 是 Service Mesh概念的具體實現。2018年被稱爲 Service Mesh 元年,譽爲新一代的微服務架構,有了Service Mesh,像Docker和Kubernetes標準化部署操做同樣來標準化咱們的應用程序運行時的操做便成爲可能。Istio是其中最成熟和被普遍接受的開源項目。它是鏈接、管理和保護微服務的開放平臺。今天發佈的1.0 版本是一個重要的里程碑。這意味着Istio的全部核心功能都已經能夠落地部署,再也不只是演示版了。github
本文來自阿里巴巴中間件事業部硅谷團隊 Istio 技術專家 Andy在 Istio上的實踐和對1.0版本的解讀,Andy長期關注Service Mesh,在Cloud Foundry,Kubernetes,Envoy上有着豐富的實踐和開發經驗。編程
1.0版本中的新功能大體以下:緩存
» 網絡安全
» 策略和遙測服務器
» Mixer 適配器網絡
» 安全架構
在衆多的改變中,下面幾點和以前版本相比,有較大的加強和改動,在這裏咱們展開介紹下:框架
» IstioGateway 替代 IstioIngress
在 istio 1.0 以前,Istio Ingress 直接使用 Kubernetes Ingress,所以受到 Kubernetes 的 Ingress 自己只有 L7 的網絡控制功能的限制,不少功能沒法實現。這些功能包括:編程語言
爲了解決這些問題,Istio 在 1.0 版本提出了 Istio Gateway 的概念,從而擺脫了對 Kubernetes Ingress 的依賴,能夠實現更多的功能,例如: L4-L6的LB,對外的mTLS,對SNI(服務器名稱指示)的支持等。
若是咱們但願給一個 Kubernetes 的 guestbook ui Service 作一個 Istio Ingress 的話,在 0.8 版本之前咱們須要以下定義一個 Istio Ingress Resourse:
這裏面是咱們對 L7 的策略配置。可是能夠看到,基於這種 Ingress 並不能支持 mTLS 等高級功能。如今在 Istio 1.0 版本,咱們可使用新的 Istio Gateway 來完成相似的配置。這種配置會分兩部分:
對於上面一樣的例子,Istio Gateway 資源的定義是這樣的:
經過 Gateway 這種資源,咱們提供了對mTLS的支持。爲了完成對 HTTP path 的匹配和對 Virtual Host 的支持,咱們須要定一個新的 VirtualService 資源而且將它和 Gateway 資源綁定。Virtual Services 很像之前的 Virtual Host,它能夠容許同一個IP對應不一樣的域名,因此即便一樣的路徑也不會產生重複。
它的配置和與 Gateway 的綁定以下:
» Mixer 進程外適配器
適配器是讓第三方用戶來擴展Mixer功能的,好比和本身的 Logging 系統集成。之前的適配器,是與 Mixer 主進程在一塊兒的。這樣有些問題,好比若是適配器有用戶的認證信息,那麼上傳的時候全部人都知道了。另外,如何對這些適配器作健康檢查(health check)呢? 它們在同一個進程裏。
新的版本,適配器在 Mixer 主進程以外,用戶不但能夠決定是否要把適配器上傳,並且運行時也能夠進行外部健康檢查了。
不過因爲適配器 和 Mixer 主進程不在同一個進程,須要進行進程間通信,所以適配器要和主進程通信會依賴 RPC。這裏 Mixer 選用了比較流行的標準 RPC 框架 gRPC做爲實現。
有了這個功能,在 Istio 的 Mixer 中開發外適配器功能只須要以下三個步驟:
若是有興趣更深刻的瞭解適配器的開發和使用,請參考這兩個教程
支持可使用身份驗證策略配置的 JWT 身份驗證
JWT(JSON Web Token)是一種基於token的鑑權機制。JWT很流行的緣由主要是它的簡單易用,特別是採用JSON格式,是大部分編程語言支持的。因此儘管出現的時間不長,但倒是不少編程人員的鑑權首選。所以 Istio 對 JWT 進行了支持。
例如咱們建立一個 JWT token payload來慶祝 Istio 1.0 GA :
用戶調用時,須要把 JTW token 來編碼後,以 Bearer 形式進行傳遞:
Istio 就用這個Bearer來做最終用戶認證。是否是很簡單呢?Istio 以前就支持基於 JWT 的Authentication。新的版本開始支持 Authorization。對用戶來講,只是在同一個Authentication policy 的資源上擴展一部分而已。
Istio的 Authorization 是基於角色的訪問控制,它提供命名空間級別, 服務級別和 method-level 的訪問控制。
要實現Authorization,只須要以下幾步:
更詳盡的內容,能夠參考 Istio 安全文檔:
以上是關於Istio 1.0的簡單介紹。若是你們感興趣的話,能夠經過如下的教程進行實踐。
阿里巴巴中間件技術團隊會持續關注和參與Service Mesh的開發和推廣活動。並提供一系列關於Service Mesh和 Istio 的解讀、實踐和教程,詳細介紹 Istio新版本中的概念、功能以及將來最新的動態。咱們也正計劃在Dubbo 2.7的版本中加入對Istio的集成,充分利用Service Mesh的理念,進一步簡化微服務的管理。