華為云云原生鉆石集訓(xùn)營 第十四課:Istio流量治理與監(jiān)控管理深度剖析
前言:
前面王者課程,大家已經(jīng)對lstio流量治理和監(jiān)控管理有一定的了解
本節(jié)課程將為大家?guī)砩疃鹊膌stio流量治理和監(jiān)控管理原理剖析
課程目標:
學(xué)完本課程后,您將能夠:
1.深入理解流量治理API
2.深入理解流量監(jiān)控
3.深入理解Envoy在流量治理中的職責(zé)
目錄:
1. lstio流量治理基本介紹
2. lstio流量治理深度剖析
3. lstio監(jiān)控深度剖析
流量治理演進
上一代微服務(wù)框架,大部分流量治理方案是:
-將流量治理策略放在SDK中
- Java系微服務(wù)框架比較流行
-異構(gòu)開發(fā)語言很不友好
-缺少靈活性,流量治理策略一般是靜態(tài)配置,少數(shù)支持動態(tài)配置
lstio流量治理方案是:
-流量治理策略完全由Sidecar實現(xiàn)
應(yīng)用完全無感知
-語言無關(guān)
-靈活,支持動態(tài)配置
lstio流量治理基本介紹
簡化服務(wù)治理配置:
-熔斷,降級
-超時
-重試
- A/B測試,金絲雀發(fā)布
-基于權(quán)重的流量切分
-故障檢測與恢復(fù)
lstio流量治理深度解析
-VirtualServiceVirtualService:最重要的路由API
允許您配置如何將請求路由到Istio服務(wù)網(wǎng)格中的服務(wù),構(gòu)建在Istio和您的平臺提供的基本連接和發(fā)現(xiàn)之上。
Without VS,請求將按照基本的負載均衡策略分發(fā)到所有的服務(wù)實例
With vS,可以將請求按照百分比(Weight)分發(fā)到一組或者多組后端實例,或者根據(jù)請求屬性(Match),將請求路由到不同的服務(wù)實例組。
典型的使用場景是灰度發(fā)布
lstio流量治理深度解析-VirtualService
. hosts:選擇目標服務(wù),VS應(yīng)用到目標服務(wù)上
. match:匹配HTTP屬性Header,Authority,URI,Method,QueryParam
. Destination.Host:目的服務(wù)
. Destination.Subset:通過DestinationRule定義的服務(wù)實例集合
. Route.Weight:流量權(quán)重分配
lstio流量治理深度解析-DestinationRule
DestinationRule:
·常常與VS配合使用,VS定義一些策略將流量路由到某些目標服務(wù),而DestinationRule允許用戶針對目標服務(wù)配置一些負載均衡,異常檢測,連接池以及證書
·特別是利用DR Subset定義特定服務(wù)的實例分組,結(jié)合VirtualService可以實現(xiàn)完整的藍綠部署,金絲雀發(fā)布等功能。
K8S API Server
提供Pilot相關(guān)的CRD Resource的增、刪、改、查。和Pilot相關(guān)的CRD有以下幾種:
Virtualservice:用于定義路由規(guī)則,如根據(jù)來源或 Header 制定規(guī)則,或在不同服務(wù)版本之間分拆流量。
DestinationRule:定義目的服務(wù)的配置策略以及可路由子集。策略包括斷路器、負載均衡以及 TLS 等。
ServiceEntry:可以使用ServiceEntry向Istio中加入附加的服務(wù)條目,以使網(wǎng)格內(nèi)可以向istio 服務(wù)網(wǎng)格之外的服務(wù)發(fā)出請求。
Gateway:為網(wǎng)格配置網(wǎng)關(guān),以允許一個服務(wù)可以被網(wǎng)格外部訪問。
EnvoyFilter:可以為Envoy配置過濾器。由于Envoy已經(jīng)支持Lua過濾器,因此可以通過EnvoyFilter啟用Lua過濾器,動態(tài)改變Envoy的過濾鏈行為。我之前一直在考慮如何才能動態(tài)擴展Envoy的能力,EnvoyFilter提供了很靈活的擴展性。
Sidecar:缺省情況下,Pilot將會把和Envoy Sidecar所在namespace的所有services的相關(guān)配置,包括inbound和outbound listenter, cluster, route等,都下發(fā)給Enovy。使用Sidecar可以對Pilot向Envoy Sidcar下發(fā)的配置進行更細粒度的調(diào)整,例如只向其下發(fā)該Sidecar 所在服務(wù)需要訪問的那些外部服務(wù)的相關(guān)outbound配置。
lstio流量治理深度解析-Gateway
類似Ingress,K8s Gateway API
應(yīng)用于網(wǎng)格邊緣獨立運行的Envoy代理
配置L4-L6的負載均衡,比如端口,證書
L7層的路由能力需要與VirtualService綁定
lstio流量治理深度解析-ServiceEntry
·類似K8s Service
·將外部服務(wù)注冊到K8s注冊中心
·將虛擬機服務(wù)注冊到K8s注冊中心
·配合VirtualService與DestinationRule可應(yīng)用部分治理能力:重試,超時,故障注入,熔斷,異常檢測
lstio流量治理深度解析-Sidecar
. lstio中,默認所有的工作負載可訪問所有的服務(wù)
·利用Sidecar可以:
·限制負載可訪問的服務(wù)
·精確控制部分端口可被訪問
. Sidecar可作用在具體的工作負載or Namespaces內(nèi)
·大規(guī)模場景下,降低控制面和數(shù)據(jù)面開銷(內(nèi)存,CPU,帶寬)
lstio Observability
lstio提供以下可觀測性能力(非侵入)∶
Metrics,應(yīng)用流量粒度的監(jiān)控統(tǒng)計
Distributed Traces:調(diào)用鏈上報
Access Logs:訪問日志
服務(wù)網(wǎng)格監(jiān)控-Metrics
指標監(jiān)控依靠Istio擴展的Filter:
istio.alpn過濾器,重寫ALPN
istio.metadata_exchange,交換雙方的Metadata
istio.stats,記錄metrics
服務(wù)網(wǎng)格監(jiān)控-Trace
并非完全零侵入,應(yīng)用必須進行調(diào)用鏈埋點,即從接收的請求中采集以下信息,并且發(fā)送給下一個服務(wù)
·x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampledo
x-b3-flags
x-ot-span-context ( Lightstep )
Envoy send Tracing到Trace后端:Zipkin Lightstep Datadog Stackdriver? ?Opencensus Skywalking
Istio Trace支持
envoy支持trace
envoy原生就支持分布式追蹤系統(tǒng)的接入,如支持jaeger和zipkin,如envoy的Tracing官方文檔中表明envoy支持如下trace特性:
生成Request Id,填充HTTP的header字段x-request-id
外部跟蹤服務(wù)集成,如支持LightStep, Zipkin或任何Zipkin兼容后端(如Jaeger)
添加Client trace ID
Istio的envoy代理攔截流量后會主動上報trace系統(tǒng),通過proxy的參數(shù)zipkinAddress指定了trace系統(tǒng)的地址,這樣就不會再經(jīng)過mixer了,直接envoy和trace系統(tǒng)交互,大體流程:
如果incoming的請求沒有trace相關(guān)的headers,則會再流量進入pods之前創(chuàng)建一個root span
如果incoming的請求包含有trace相關(guān)的headers,Sidecar的proxy將會extract這些span的上下文信息,然后再在流量進入pods之前創(chuàng)建一個繼承上一個span的新的span
Tracing 簡介
為什么需要tracing?
在微服務(wù)架構(gòu)中,當多個服務(wù)相互調(diào)用時,故障排查變得不再容易。故障的根因是什么,為什么請求的性能不佳,哪個服務(wù)是調(diào)用堆棧中的瓶頸,請求之間的網(wǎng)絡(luò)延遲是多少?
有了分布式跟蹤,就可以可視化完整的調(diào)用堆棧,查看哪個服務(wù)調(diào)用了哪個服務(wù),每個調(diào)用花費了多長時間以及它們之間的網(wǎng)絡(luò)等待時間是多少。可以知道請求失敗的位置或哪個服務(wù)花費太多時間來響應(yīng)。
服務(wù)網(wǎng)格監(jiān)控-AccessLog
支持的AccessLog Sink:
File,異步寫
gRPC
stdout
stderr
總結(jié):
本課程講解重點1: Istio流量治理API及實現(xiàn)。
本課程講解重點2: Istio的監(jiān)控和調(diào)用鏈埋點
參考鏈接:
流量治理: https://support.huaweicloud.com/usermanual-istio/istio_01_0011.html
流量監(jiān)控: https://support.huaweicloud.com/usermanual-istio/istio_ 01_0012.html
lstio官方網(wǎng)站: https://istio.io/
ASM應(yīng)用服務(wù)網(wǎng)格官方首頁: https://support.huaweicloud.com/istio/
Istio Kubernetes 云原生
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。