欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

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

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),鳳陽(yáng)企業(yè)網(wǎng)站建設(shè),鳳陽(yáng)品牌網(wǎng)站建設(shè),網(wǎng)站定制,鳳陽(yáng)網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,鳳陽(yáng)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

Istio基本架構(gòu)

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

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

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

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

控制平面組件——Pilot

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

Pilot功能

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

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

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

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

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

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

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

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

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

Pilot實(shí)現(xiàn)

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

(1)Discovery Service

對(duì)應(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ù)面可以理解的格式,通過(guò)標(biāo)準(zhǔn)的數(shù)據(jù)面API下發(fā)到網(wǎng)格中的各個(gè)Sidecar中。

(2)Kubernetes API Server

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

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

DestinationRule:定義目的服務(wù)的配置策略以及可路由子集。策略包括斷路?、負(fù)載均衡以及 TLS 等。

ServiceEntry:用 ServiceEntry 可以向Istio中加入附加的服務(wù)條目,以使網(wǎng)格內(nèi)可以向Istio 服務(wù)網(wǎng)格之外的服務(wù)發(fā)出請(qǐng)求。

Gateway:為網(wǎng)格配置網(wǎng)關(guān),以允許一個(gè)服務(wù)可以被網(wǎng)格外部訪問(wèn)。

EnvoyFilter:可以為Envoy配置過(guò)濾?。由于Envoy已經(jīng)支持Lua過(guò)濾?,因此可以通過(guò)EnvoyFilter啟用Lua過(guò)濾?,動(dòng)態(tài)改變Envoy的過(guò)濾鏈行為。我之前一直在考慮如何才能動(dòng)態(tài)擴(kuò)展Envoy的能力,EnvoyFilter提供了很靈活的擴(kuò)展性。

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

Envoy實(shí)現(xiàn)

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

1.初始化容器?proxy_init

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

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

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

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

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

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

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

2)envoy進(jìn)程

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

Envoy相關(guān)概念

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

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

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

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

詳細(xì)流程如下:

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

服務(wù)間交互流程

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

基本流程分析如下:

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

本文標(biāo)題:深度解析Istio系列之流量控制篇
文章鏈接:http://chinadenli.net/article44/giehee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、手機(jī)網(wǎng)站建設(shè)、微信小程序、用戶體驗(yàn)網(wǎng)站設(shè)計(jì)公司、移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)