真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

深度解析Istio系列之流量控制篇-創(chuàng)新互聯(lián)

得益于良好的模塊化設(shè)計,Istio的各個組件設(shè)計清晰,分工明確,幾個大的組件之間甚至可以獨(dú)立工作,所以接下來我們將逐一深入分析Istio的各個組件。本文首先詳細(xì)分析一下我們最常用的流量管理功能所對應(yīng)的模塊——Pilot和Envoy。

創(chuàng)新互聯(lián)長期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為蔚縣企業(yè)提供專業(yè)的網(wǎng)站設(shè)計、做網(wǎng)站,蔚縣網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

Istio基本架構(gòu)

Istio基本架構(gòu)圖如下圖所示,網(wǎng)格東西向及南北向的流量控制,核心思路是由Pilot維護(hù)管理策略,并通過標(biāo)準(zhǔn)接口下發(fā)到Envoy Proxy中,由Envoy最終實現(xiàn)流量的轉(zhuǎn)發(fā)。
深度解析Istio系列之流量控制篇

Istio服務(wù)網(wǎng)格邏輯上分為數(shù)據(jù)平面和控制平面:

  • 數(shù)據(jù)平面:由一組以Sidecar方式部署的智能代理(Envoy)組成,這些代理可以調(diào)節(jié)和控制微服務(wù)之間所有的網(wǎng)絡(luò)通信。
  • 控制平面:服務(wù)管理和配置代理來路由流量。

其中與流量管理相關(guān)的主要包括控制層面的Pilot以及數(shù)據(jù)層面的Envoy Proxy。

控制平面組件——Pilot

Pilot的基本架構(gòu)如下圖所示。
深度解析Istio系列之流量控制篇

Pilot功能

根據(jù)上圖,Pilot主要實現(xiàn)下述功能:

1.統(tǒng)一服務(wù)模型

統(tǒng)一服務(wù)模型主要功能是從底層平臺獲取服務(wù)相關(guān)信息以及通過RuleAPI定義的服務(wù)間流量規(guī)則,以kubernetes為例,統(tǒng)一服務(wù)模型從平臺上獲取注冊在Pod、Service、Node以及流量規(guī)則信息,獲取到各種信息后轉(zhuǎn)變成數(shù)據(jù)平面上可理解的數(shù)據(jù)格式存儲在Abstract Model中。

2. 標(biāo)準(zhǔn)數(shù)據(jù)平面API

獲取到各種服務(wù)信息以及流量規(guī)則之后,會通過該API下發(fā)到數(shù)據(jù)面的Sidecar中。

3. 業(yè)務(wù)DSL語言(Domain Speci?c Language)

SL語言提供了面向業(yè)務(wù)的高層抽象,可以被運(yùn)維人員理解和使用。運(yùn)維人員使用該DSL定義流量規(guī)則并下發(fā)到Pilot,這些規(guī)則被Pilot翻譯成數(shù)據(jù)面的配置,再通過標(biāo)準(zhǔn)API分發(fā)到Envoy實例,可以在運(yùn)行期對微服務(wù)的流量進(jìn)行控制和調(diào)整。

Pilot的規(guī)則DSL是采用K8S API Server中的Custom Resource (CRD)實現(xiàn)的,因此和其他資源類型如Service Pod Deployment的創(chuàng)建和使用方法類似,都可以用Kubectl進(jìn)行創(chuàng)建。

通過運(yùn)用不同的流量規(guī)則,可以對網(wǎng)格中微服務(wù)進(jìn)行精細(xì)化的流量控制,如按版本分流,斷路器,故障注入,灰度發(fā)布等。

Pilot實現(xiàn)

與Pilot相關(guān)的服務(wù)主要有兩個:

(1)Discovery Service

對應(yīng)的docker為gcr.io/istio-release/pilot,進(jìn)程為pilot-discovery,該組件的功能包括:

從Service Provider中獲取服務(wù)信息,除了這里主要介紹的Kubernetes之外,Istio還支持Consul作為Service Provider。

從Kubernetes API Server中獲取流量規(guī)則(Kubernetes CRD Resource)。

將服務(wù)信息和流量規(guī)則轉(zhuǎn)化為數(shù)據(jù)面可以理解的格式,通過標(biāo)準(zhǔn)的數(shù)據(jù)面API下發(fā)到網(wǎng)格中的各個Sidecar中。

(2)Kubernetes API Server

提供Pilot相關(guān)的CRD Resource的增、刪、改、查。和Pilot相關(guān)的CRD有以下幾種:

Virtualservice:用于定義路由規(guī)則,如根據(jù)來源或 Header 制定規(guī)則,或在不同服務(wù)版本之間分拆流量。

DestinationRule:定義目的服務(wù)的配置策略以及可路由子集。策略包括斷路?、負(fù)載均衡以及 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)擴(kuò)展Envoy的能力,EnvoyFilter提供了很靈活的擴(kuò)展性。

數(shù)據(jù)平面組件——Envoy

Envoy實現(xiàn)

Istio通過K8s的Admission Webhook機(jī)制實現(xiàn)了sidecar的自動注入,Istio集群中的每個微服務(wù)會被加入Envoy相關(guān)的容?。下面是官方示例productpage微服務(wù)的Pod內(nèi)容,可見除productpage之外,Istio還在該P(yáng)od中注入了兩個容?gcr.io/istio-release/proxy_init和gcr.io/istio-release/proxyv2。

1.初始化容器?proxy_init

Productpage的Pod中有一個InitContainer proxy_init,InitContrainer是K8S提供的機(jī)制,用于在Pod中執(zhí)行一些初始化任務(wù),在Initialcontainer執(zhí)行完畢并退出后,才會啟動Pod中的其它c(diǎn)ontainer。

在proxy_init中執(zhí)行iptables.sh腳本,該腳本的作用是通過配置iptable來劫持Pod中的流量。

2.運(yùn)行時Sidecar容器?proxyv2

Envoy的大部分配置都是dynamic resource,包括網(wǎng)格中服務(wù)相關(guān)的service cluster, listener, route規(guī)則等。這些dynamic resource是通過xDS接口從Istio控制面中動態(tài)獲取的。但Envoy如何知道xDS server的地址呢?這是在Envoy初始化配置文件中以static resource的方式配置的。

在Proxyv2容器運(yùn)行時,有兩個進(jìn)程pilot-agent和envoy。

1)pilot-agent進(jìn)程

該進(jìn)程根據(jù)K8S API Server中的配置信息生成Envoy的配置文件,并負(fù)責(zé)啟動Envoy進(jìn)程。注意Envoy的大部分配置信息都是通過xDS接口從Pilot中動態(tài)獲取的,因此Agent生成的只是用于初始化Envoy的少量靜態(tài)配置。

2)envoy進(jìn)程

Envoy由Pilot-agent進(jìn)程啟動,啟動后,Envoy讀取Pilot-agent為它生成的配置文件,然后根據(jù)該文件的配置獲取到Pilot的地址,通過數(shù)據(jù)面標(biāo)準(zhǔn)API的xDS接口從pilot拉取動態(tài)配置信息,包括路路由(route),監(jiān)聽器?(listener),服務(wù)集群(cluster)和服務(wù)端點(diǎn)(endpoint)。Envoy初始化完成后,就根據(jù)這些配置信息對微服務(wù)間的通信進(jìn)行尋址和路由。

Envoy相關(guān)概念

數(shù)據(jù)面組件中涉及的概念比較多,這里列舉如下。

  • Host:能夠進(jìn)行網(wǎng)絡(luò)通信的實體(在手機(jī)或服務(wù)?等上的應(yīng)用程序)。在 Envoy 中主機(jī)是指邏輯網(wǎng)絡(luò)應(yīng)用程序。只要每臺主機(jī)都可以獨(dú)立尋址,一塊物理硬件上就運(yùn)行多個主機(jī)。
  • Downstream:下游(downstream)主機(jī)連接到 Envoy,發(fā)送請求并或獲得響應(yīng)。
  • Upstream:上游(upstream)主機(jī)獲取來自 Envoy 的鏈接請求和響應(yīng)。
  • Cluster:集群(cluster)是 Envoy 連接到的一組邏輯上相似的上游主機(jī)。Envoy 通過服務(wù)發(fā)現(xiàn)發(fā)現(xiàn)集群中的成員。Envoy 可以通過主動運(yùn)行狀況檢查來確定集群成員的健康狀況。Envoy 如何將請求路由到集群成員由負(fù)載均衡策略確定。
  • Mesh:一組互相協(xié)調(diào)以提供一致網(wǎng)絡(luò)拓?fù)涞闹鳈C(jī)。Envoy mesh 是指一組 Envoy 代理,它們構(gòu)成了由多種不同服務(wù)和應(yīng)用程序平臺組成的分布式系統(tǒng)的消息傳遞基礎(chǔ)。
  • 運(yùn)行時配置:與 Envoy 一起部署的帶外實時配置系統(tǒng)。可以在無需重啟 Envoy 或更改 Envoy 主配置的情況下,通過更改設(shè)置來影響操作。
  • Listener: 偵聽?(listener)是可以由下游客戶端連接的命名網(wǎng)絡(luò)位置(例如,端口、unix域套接字等)。Envoy 公開一個或多個下游主機(jī)連接的偵聽?。一般是每臺主機(jī)運(yùn)行一個 Envoy,使用單進(jìn)程運(yùn)行,但是每個進(jìn)程中可以啟動任意數(shù)量的 Listener(監(jiān)聽?),目前只監(jiān)聽 TCP,每個監(jiān)聽器都獨(dú)立配置一定數(shù)量的(L3/L4)網(wǎng)絡(luò)過濾?。Listenter 也可以通過 Listener Discovery Service(LDS)動態(tài)獲取。
  • Listener ?lter:Listener 使用 listener ?lter(監(jiān)聽?過濾器)來操作鏈接的元數(shù)據(jù)。它的作用是在不更改 Envoy 的核心功能的情況下添加更多的集成功能。Listener ?lter 的 API 相對簡單,因為這些過濾器最終是在新接受的套接字上運(yùn)行。在鏈中可以互相銜接以支持更復(fù)雜的場景,例如調(diào)用速率限制。
  • Envoy 已經(jīng)包含了多個監(jiān)聽?過濾?。
  • Http Route Table:HTTP 的路由規(guī)則,例如請求的域名,Path 符合什么規(guī)則,轉(zhuǎn)發(fā)給哪個 Cluster。
  • Health checking:健康檢查會與SDS服務(wù)發(fā)現(xiàn)配合使用。但是,即使用其他服務(wù)發(fā)現(xiàn)方式,也有相應(yīng)需要進(jìn)行主動健康檢查的情況。
  • xDS:xDS 是一個關(guān)鍵概念,它是一類發(fā)現(xiàn)服務(wù)的統(tǒng)稱,通過對 xDS 的請求來動態(tài)更新 Envoy 配置,其包括如下幾類:
    CDS:Cluster Discovery Service
    EDS:Endpoint Discovery Service
    SDS:Service Discovery Service
    RDS:Route Discovery Service
    LDS:Listener Discovery Service

Envoy配置

Envoy的配置包含兩部分,初始化配置和動態(tài)更新的配置。

1.Envoy初始配置
Pilot-agent進(jìn)程根據(jù)啟動參數(shù)和K8S API Server中的配置信息生成Envoy的初始配置文件,并負(fù)責(zé)啟動Envoy進(jìn)程。從ps命令輸出可以看到Pilot-agent在啟動Envoy進(jìn)程時傳入了pilot地址和zipkin地址,并為Envoy生成了一個初始化配置文件envoy-rev0.json。

2.Envoy動態(tài)更新配置
通過管理接口獲取完整配置。從Envoy初始化配置文件中,我們可以大致看到Istio通過Envoy來實現(xiàn)服務(wù)發(fā)現(xiàn)和流量管理的基本原理。即控制面將xDS server信息通過static resource的方式配置到Envoy的初始化配置文件中,Envoy啟動后通過xDS server獲取到dynamic resource,包括網(wǎng)格中的service信息及路由規(guī)則。
深度解析Istio系列之流量控制篇

詳細(xì)流程如下:

  1. Pilot-agent根據(jù)啟動參數(shù)和K8S API Server中的配置信息生成Envoy的初始配置文件envoy-rev0.json,該文件告訴Envoy從xDS server中獲取動態(tài)配置信息,并配置了了xDS server的地址信息,即控制面的Pilot。
  2. Pilot-agent使用envoy-rev0.json啟動Envoy進(jìn)程。
  3. Envoy根據(jù)初始配置獲得Pilot地址,采用xDS接口從Pilot獲取到Listener,Cluster,Route等d動態(tài)配置信息。
  4. Envoy根據(jù)獲取到的動態(tài)配置啟動Listener,并根據(jù)Listener的配置,結(jié)合Route和Cluster對攔截到的流量進(jìn)行處理。

服務(wù)間交互流程

下圖表述了服務(wù)與服務(wù)之間通過sidecar進(jìn)行交互的流程。
深度解析Istio系列之流量控制篇

基本流程分析如下:

  1. Productpage發(fā)起對Details的調(diào)用:http://details:9080/details/0 。
  2. 請求被Pod的iptable規(guī)則攔截,轉(zhuǎn)發(fā)到15001端口。
  3. Envoy的Virtual Listener在15001端口上監(jiān)聽,收到了該請求。
  4. 請求被Virtual Listener根據(jù)原目標(biāo)IP(通配)和端口(9080)轉(zhuǎn)發(fā)到0.0.0.0_900這個listener。
    深度解析Istio系列之流量控制篇
  5. 根據(jù)0.0.0.0_9080 listener的http_connection_manager ?lter配置,該請求采用"9080" route進(jìn)行分發(fā)。
    深度解析Istio系列之流量控制篇
  6. "9080"這個route的配置中,host name為details:9080的請求對應(yīng)的cluster為outbound|9080||details.default.svc.cluster.local。
    深度解析Istio系列之流量控制篇
  7. outbound|9080||details.default.svc.cluster.local cluster為動態(tài)資源,通過eds查詢得到其endpoint為192.168.206.21:9080。
    深度解析Istio系列之流量控制篇
  8. 請求被轉(zhuǎn)發(fā)到192.168.206.21,即Details服務(wù)所在的Pod,被iptable規(guī)則攔截,轉(zhuǎn)發(fā)到15001端口。
  9. Envoy的Virtual Listener在15001端口上監(jiān)聽,收到了該請求。
  10. 請求被Virtual Listener根據(jù)請求原目標(biāo)地址IP(192.168.206.21)和端口(9080)轉(zhuǎn)發(fā)到192.168.206.21_9080這個listener。
  11. 根據(jù)92.168.206.21_9080 listener的http_connection_manager ?lter配置,該請求對應(yīng)的cluster為 inbound|9080||details.default.svc.cluster.local 。
    深度解析Istio系列之流量控制篇
  12. inbound|9080||details.default.svc.cluster.local cluster配置的host為127.0.0.1:9080。
  13. 請求被轉(zhuǎn)發(fā)到127.0.0.1:9080,即Details服務(wù)進(jìn)行處理。

參考鏈接

https://zhaohuabing.com/post/2018-09-25-istio-traffic-management-impl-intro/

https://istio.io/zh/docs/concepts/what-is-istio/

https://www.cnblogs.com/xishuai/p/microservices-and-service-mesh.html

深度解析Istio系列之流量控制篇

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


網(wǎng)站欄目:深度解析Istio系列之流量控制篇-創(chuàng)新互聯(lián)
文章路徑:http://weahome.cn/article/cecesj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部