上一篇文章中,咱們介紹了Istio針對單集羣的三種主流部署安裝方式:使用Istioctl安裝、使用Helm自定義安裝、獨立Operator安裝。本文將向你們介紹kubernetes中的應用接入Istio。主要包括kubernetes 中應用接入Istio使用實例、應用技巧、基本知識點總結和須要注意事項。 前端
用什麼姿式接入 istio? node
雖然 istio 能解決那麼多的問題,可是引入 istio 並非沒有代價的。最大的問題是 istio 的複雜性,強大的功能也意味着 istio 的概念和組件很是多,要想理解和掌握 istio ,併成功在生產環境中部署須要很是詳細的規劃。通常狀況下,集羣管理團隊須要對kubernetes很是熟悉,瞭解經常使用的使用模式,而後採用逐步演進的方式把 istio 的功能分批掌控下來。 數據庫
咱們設定如下目標: segmentfault
•istio部署 後端
•dfb相關服務部署 api
•網關功能 網絡
•流量分配,按比例,header 負載均衡
•超時,重試 post
Istio的幾個基本資源對象:url
網關功能:Gateway
Gateway 在網格邊緣接收外部訪問,並將流量轉發到網格內的服務。Istio經過Gateway將網格內的服務發佈成外部可訪問的服務,還能夠經過Gateway 配置外部訪問的端口、協議及與內部服務的映射關係。
網關功能常見的應用:
在實踐中。咱們更多須要的是1,3兩個場景。
在dfb服務中,dfb-login 做爲最外層的前端,是幾個服務中惟一和外部用戶產生交互的服務。所以咱們經過網關功能,將dfb-login 經過域名暴露給用戶。
建立gateway 的yml文件:
建立virtualservice.yml:
咱們建立了兩個資源對象,一個VirtualService 用來描述流量的路由關係。全部url 前綴爲/ 的請求都route 到後端dfb-login.dfb-istio.svc.cluster.local 服務。
這個virtuaservice 經過gateways 字段和咱們申明的另外一個gateway 資源相互綁定。在Gateway 資源對象中。定義了入口的域名,協議,以及TLS 相關的配置。在istio 中。默認的ingressgateway 會監聽gateway 資源對象的變動。多個ingressgateway 經過selector 進行選擇.默認ingressgateway 是一個loadbalancer的service 。
咱們將這個ingressgateway 修改成宿主機網絡,並固定到一個單獨的節點。這樣咱們就能夠經過將域名解析到這個node節點的方式訪問部署好的入口。
流量分配:按比例,根據請求內容
咱們設置了兩個版本的login 服務。V1 版本用戶登陸後顯示的餘額是從數據庫取出來的。V2版本則是0。根據這兩個版本的差別來判斷流量的流向。
首先經過DestinationRule定義兩個版本:
根據比例:
此時屢次刷新頁面。能夠看到用戶的現金帳戶餘額在0 和真實額度之間變更。
根據請求內容決定路由:
修改上文yml 。經過postman請求dfb服務/home頁面。默認狀況下會路由指向V1版本的login服務。在請求頭添加version=v2的header。則會轉到v2的服務。
超時,重試功能
咱們首先在擴容dfb-api 這個服務爲2個pod,在其中一個pod中攔截用戶資產接口, 直接返回500 ,另外一個pod 正常返回。此時在dfb-login服務中請求。咱們能夠發現,接口500 和200 狀態碼交替出現。
location =/user/account/list/338fbcd2-1be6-4dde-9918-84b7629b1ba5 {
return500;
}
此時應用下面的重試規則,再次調用接口。此時接口狀態碼一直返回200。
經過jaeger查看調用鏈,能夠看到調用了兩次dfb-api。雖然中間調用失敗了,可是最終的狀態碼是200。