Istio是什么?
Istio是Google繼Kubernetes之后的又一開源力作,主要參與的公司包括Google,IBM,Lyft等公司。它提供了完整的非侵入式的微服務治理解決方案,包含微服務的管理、網絡連接以及安全管理等關鍵能力,無需修改任何代碼就能夠實現微服務的負載均衡,服務與服務之間的認證授權以及監控。從整個基礎設施角度上看,可以將它理解為PaaS平台上的一個面向微服務管理平台的補充。
Istio架構示意圖
Istio與Kubernetes
Kubernetes提供了部署、升級和有限的運行流量管理能力;利用service的機制來做服務注冊和發現,轉發,通過kubeproxy有一定的轉發和負載均衡能力。但並不具備上層如熔斷、限流降級、調用鏈治理等能力.
Istio則很好的補齊了k8s在微服務治理上的這部分能力,同時是基於k8s構建的,但不是像SpringCloud Netflix等完全重新做一套。Istio是谷歌微服務治理上的非常關鍵的一環。
Istio與k8s緊密結合,包括:Sicecar 運行在k8s pod里,作為一個proxy和業務容器部署在一起,部署過程對用戶透明。Mesh中要求業務程序的運行感知不到sidecar的存在,基於k8sd的pod的設計這部分做的更徹底,對用戶更透明,用戶甚至感知不到部署sidecar的這個過程。試想如果是通過VM上部署一個agent,不會有這么方便。
Pilot中包含一個controller,通過list/watch kube-apiserver自動發現K8S中的services、endpoints。它通過在Kubernetes里面注冊一個controller來監聽事件,從而獲取Service和Kubernetes的Endpoint以及Pod的關系,但是在轉發層面,不再使用kube-proxy轉發了,而是將這些映射關系轉換成為pilot自己的轉發模型,下發到envoy進行轉發。
K8s編排容器服務已經成為一種事實上的標准;因為微服務與容器在輕量、快速部署運維等特征的匹配,微服務運行在容器中也正成為一種標准實踐;對於雲原生應用,采用Kubernetes構建微服務部署和集群管理能力,采用Istio構建服務治理能力,將逐漸成為應用微服務轉型的標准配置。
自行管理Istio與CCE上使用Istio服務網格的對比
華為雲 · 雲容器引擎CCE(Cloud Container Engine)提供高可靠高性能的企業級容器應用管理服務,支持Kubernetes社區原生應用和工具,簡化雲上自動化容器運行環境搭建:
- 簡單易用:自動化創建容器集群,一站式部署/運維容器應用,一鍵式滾動升級;
- 高性能:自研高性能容器網絡,秒級自動彈性伸縮,支持高性能裸金屬容器私有集群;
- 企業級:集群控制面HA和跨AZ高可用,容器應用優雅伸縮,安全下線,保障業務不掉線;
- 開放兼容:兼容Kubernetes/Docker社區原生版本,CNCF認證的Kubernetes服務提供商,社區的主要貢獻者;
下列從安裝、運行管理和監控多維度對比自建Istio和華為雲CCE上使用Istio的差別:
|
自建 |
華為雲CCE |
Istio包管理 |
用戶自行下載和管理 |
用戶不感知 |
運行配置 |
用戶自行配置運行環境和依賴 |
用戶不感知 |
Istio安裝 |
用戶自行探索和安裝 |
用戶不需要關注具體細節,創建集群時按需啟用。 |
Sidecar注入 |
用戶自行探索和開發、配置 |
用戶不感知 |
Istio升級 |
用戶自行探索、開發不影響業務的升級方案 |
提供完整解決方案,按需進行控制面和數據面的升級操作 |
應用調用鏈 |
用戶自行探索、開發和安裝、配置 |
對接華為雲APM/AOM服務,提供請求調用鏈跟蹤查看能力 |
應用拓撲 |
用戶自行探索、開發和安裝、配置 |
對接華為雲APM/AOM服務,提供查看應用拓撲能力 |
性能監控 |
用戶自行探索、開發和安裝、配置 |
對接華為雲APM/AOM服務,提供請求響應時延的實時性能狀態監控 |
雲原生應用在CCE上的部署、管理實踐
雲原生應用、雲平台與微服務架構
雲原生應用,是指原生為在雲平台上部署運行而設計開發的應用。公平的說,大多數傳統的應用,不做任何改動,都是可以在雲平台運行起來的,只要雲平台支持這個傳統應用所運行的計算機架構和操作系統。只不過這種運行模式,僅僅是把虛擬機當物理機一樣使用,不能夠真正利用起來雲平台的能力。
雲計算平台的核心能力就是提供按需分配資源和彈性計算的能力,而雲原生應用的設計理念就是讓部署到雲平台的應用能夠利用雲平台的能力實現按需使用計算資源和彈性伸縮。
微服務架構是實現企業分布式系統的一種架構模式,即將一個復雜的單體應用按照業務的限定上下文,分解成多個獨立部署的組件。這些獨立部署的組件,就稱為微服務。而在談論雲原生應用與微服務架構關系的時候,根據上下文不同可以從兩個角度去看。
1) 宏觀的雲原生應用,即將整個分布式系統看作一個應用,這個角度下,微服務架構是實現雲原生應用的一種架構模式;
2) 微觀的雲原生應用,即每個微服務是一個應用,這種語境下,每個微服務要按照雲原生應用的設計理念去設計(如我們所熟知的雲原生12要素),才能真正實現微服務架構所要達到的目的,即讓分布式系統具備按需使用計算資源和彈性伸縮的能力。
在華為雲CCE容器服務中,我們將宏觀的雲原生應用,稱之為“應用”,而將微觀層面的雲原生應用,稱之為“組件“,用這兩個概念來對分布式應用進行管理:
圖:應用、組件與工作負載的關系
在CCE上進行雲原生應用管理的實踐
創建Kubernetes集群
在創建應用前,需要准備好一個Kubernetes集群(1.9及以上版本),並啟用Istio服務網格治理。登錄CCE控制台,在左側導航欄中單擊“資源管理 > 虛擬機集群”,在“虛擬機集群”界面,單擊“創建Kubernetes集群”,按照向導式逐步配置:
圖1:創建Kubernetes集群
圖2:使能服務網格,一鍵式安裝Istio並自動使能應用sidecar注入:
其他集群創建步驟、配置與已有CCE上創建虛擬機集群一致.
創建雲原生應用
這里我們以Istio開源社區的bookinfo樣例應用為例,其包含ProductPage、Reviews、Details、Ratings這4個微服務,拓撲結構以及網絡訪問信息如下:
在CCE左側導航欄中選擇“應用管理”,單擊“創建應用”,選擇“向導式創建” (后續將支持通過helm模板一鍵式創建微服務應用以及其流量策略配置,更方便管理),分三大塊配置:應用基本信息、網格內組件定義、對外放開路由配置。
1、 首先定義應用的基本信息:名稱、選擇所在集群和namespace:
2、 第二步,點擊添加組件,按照上方的應用拓撲和網絡設計,把組件加入到服務網格:
A、添加ratings微服務組件(容器內監聽端口為9080,開放至service mesh內部訪問端口也配置為9080,后者可根據客戶端配置自行調整)
1)配置組件基本信息:
2)選擇負載鏡像,並配置版本號為v1
3) 點擊“下一步”,負載高級配置中可以選擇配置升級策略、縮容策略、自定義監控等,我們這里不做配置,點擊“添加“:
可以看到我們為bookinfo添加了一個微服務組件進網格
B、 添加reviews微服務組件
參考上述添加ratings的步驟,添加reviews:
C、 添加details微服務組件
參考上述添加組件步驟,添加details微服務組件:
D、 添加productpage微服務組件
3、 最后,配置應用對外開放的訪問路由,從上方拓撲設計可知,productpage作為訪問入口:
A、點擊“添加應用訪問方式“
B、選擇開放至外部訪問的組件,並配置開放端口
配置后的訪問方式信息如下所示:
最后點擊右下角“創建”,啟動應用,在應用列表中可以看到新建的分布式微服務應用bookinfo及其包含的微服務組件:
通過應用開放的訪問入口訪問productpage:
在CCE上使用Istio進行灰度發布的實踐
一鍵式在集群上啟用Istio服務網格
集群下應用如果需要做微服務治理,只需要在創建集群時點擊啟用服務網格即可,不需要自行進行Istio鏡像下載、yaml配置、安裝、升級等與應用業務無關的復雜基礎設施構建工作:
開發打包新版本
下方我們以開發了一個新版本reviews微服務為例(初始容器鏡像版本號為1.5.0),新版本鏡像版本號為1.5.0-v2,並且已在本地開發機通過docker push上傳至華為雲容器鏡像服務(SWR):
新版本在現在版本基礎上增加對ratings微服務的調用,支持評分星星級別展示.
發布灰度版本並配置灰度策略
現在我們計划通過灰度發布的方式,平滑的在現網升級,在應用列表頁面,展開bookinfo下的組件信息,選擇reviews微服務組件的“添加灰度版本”:
啟動灰度版本:配置灰度版本號v2,確認好鏡像版本(系統會默認選擇最新版本的鏡像),點擊“啟動負載”即可啟動灰度版本,容器高級配置已默認繼承已有版本
觀察灰度版本運行狀態並配置灰度策略:按照比例分配灰度版本流量比例(這里以20%為例),觀察負載啟動成功后,點擊“提交策略”:
回到組件列表可以看到,review微服務已處於灰度發布狀態:
對review服務進行灰度發布前后的流量對比如下所示:
初始版本:
灰度狀態:如圖示,review v2版本調用ratings服務獲取星級評價,並將20%流量分流至本版本上
訪問productpage,可以看到部分請求可以顯示星級評價,部分請求仍然是老版本的顯示效果(即沒有評星這個新特性),並且出現的比例接近1:4.
部分訪問結果為原有的頁面:
部分訪問結果為帶有星級評價特性的頁面:
持續觀測灰度版本運轉狀態,並進行流量切換
接下來,我們會持續觀測灰度版本的運行狀態,在確認業務處理、性能滿足要求后,我們可以選擇逐步調大灰度版本的流量比例,而后進一步將流量全部導流至灰度版本上:
- 觀察健康與性能狀態:
點擊CCE左側導航欄“運維中心”進入AOM服務:
選擇“指標”->“應用”菜單,持續觀察review服務灰度版本v2的健康狀態與性能狀態:
- 觀察調用鏈以及請求響應時延:在CCE應用管理中,點擊bookinfo應用,查看詳情,可以看到CCE服務提供了請求調用鏈跟蹤能力,能夠實現分布式異常請求的快速定位(當前提供開源zipkin和grafana能力,后續將對接至華為雲AOM服務提供相應能力)
可以看到V2版本運轉正常,那么下一步我們將逐步擴大流量比,最后將流量全部導至灰度版本,在cce服務中,點擊組件名稱,進入組件詳情頁面,點擊“接管所有流量”:
系統提示會將接管原有版本的所有流量,點擊“確定“按鈕:
現在所有訪問reviews的流量都導向v2版本:
訪問productpage,所有的請求都會呈現星級評價特性:
最后,我們將原有老版本(V1)從平台移除:
點擊確認后,可以看到該微服務只剩下v2版本在運轉:
通過Istioctl工具進行更多微服務流量治理
在上述規則的基礎上,cce Istio服務網格還提供了Istioctl命令行工具,實現更全面的流量治理能力,如限流、熔斷、連接池管理、會話保持等。進入”資源管理“->“虛擬機集群“,點擊所要管理的集群,可以看到Istio命令行的下載和使用指導:
總結
菊廠雲CCE容器引擎 + Istio + 應用運維AOM/APM +容器鏡像服務 SWR,提供了完整的雲原生應用從開發、部署、上線、監控的完整生命周期管理全棧服務,讓企業上雲更簡單,運行更高效。
目前Istio服務網格能力已開放公測,可通過下方鏈接,快速申請公測,華為雲容器服務的專家將全力為您服務,為您的成功保駕護航.
申請鏈接:https://console.huaweicloud.com/cce2.0/?region=cn-north-1#/app/Istio/meshList