天天看點

2020/12/11 基于Istio實作微服務治理

1.1 istio介紹及安裝

基于spring-cloud去實作微服務的時候,實作服務治理,spring是基于java的,如果要所有語言都支援服務治理,就需要istio

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

服務網格是一種概念,隻是一種思想,istio隻是其中一種實作

2020/12/11 基于Istio實作微服務治理

spring cloud無法去跨平台。先把這兩個了解為兩個pod,如果兩個服務pod要進行通信治理,基本實作就是放在業務代碼裡

2020/12/11 基于Istio實作微服務治理

service mesh是這麼做的,在pod裡加上容器,通常稱為sidecar邊車,流量都會經過sidecar,就可以進行一些流量的處理,就可以了解為每個業務的pod添加了類似nginx的容器,也就是服務治理的能力被放到了sidecar裡,業務代碼還是怎麼寫就怎麼寫,隻不過代碼裡不寫服務治理相關内容,服務治理的能力放到了平台上

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

sidecar裡可以做很多事情,服務注冊,健康檢查,流量熔斷

2020/12/11 基于Istio實作微服務治理

藍色的是邊車,邊車之間做通信,流量和流量之間的傳遞是放在平台裡

2020/12/11 基于Istio實作微服務治理

在你的服務旁邊加上了代理層

2020/12/11 基于Istio實作微服務治理

service mesh服務網格是一種思想,它的實作,第一代是linker的和envoy,更多偏向于代理層的實作

2020/12/11 基于Istio實作微服務治理

對于這個控制層面做的不好,可以寫配置,配置如何下發給你

2020/12/11 基于Istio實作微服務治理

第二代的istio事實上是service mesh的一個标準,實際上是在envoy基礎上進行改良,補足了控制平面的功能

2020/12/11 基于Istio實作微服務治理

流量來走的都是微服務的proxy(可以叫envoy,sidecar,就是一個容器),流量進入到代理,出去的流量也會經過代理,

2020/12/11 基于Istio實作微服務治理

轉發控制的規則,是控制層面下發代理的、

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

下載下傳好istio版本

2020/12/11 基于Istio實作微服務治理

‘用戶端控制工具

2020/12/11 基于Istio實作微服務治理

複制指令到path路徑下

2020/12/11 基于Istio實作微服務治理

1.7.3版本

2020/12/11 基于Istio實作微服務治理

有個指令補全,需要去執行shell

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

檢視一下profile是什麼意思

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

可以了解為不同的配置,跟買車類似,istio的配置有這麼幾個

2020/12/11 基于Istio實作微服務治理

選擇default,就有這麼幾個元件是安裝的,X号代表安裝

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

istiod就是控制平面的

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

檢視安裝的哪些元件是安裝的可以檢視這個連結

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

istioctl裡有 manifest generate生成,按照指定的profile生成yaml檔案

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

想看demo項有哪些

2020/12/11 基于Istio實作微服務治理

都是一些K8S的資源

2020/12/11 基于Istio實作微服務治理

會多一個命名空間

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

**、其實就是起了三個deployment,建立三個service、

**

2020/12/11 基于Istio實作微服務治理

crd是istio自己實作的功能需要建立的

2020/12/11 基于Istio實作微服務治理

這樣istio就安裝好了,解除安裝就是把K8S裡這麼些資源删除

2020/12/11 基于Istio實作微服務治理

1.2 istio流量模型示例一

有一個前端服務,是一個前端v1 deployment版本的服務,後面是賬單服務,由一個賬單V1 deployment版本,前端暴露一個service賬單服務去通路

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

先建立前端的

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

pod容器裡用這個指令來啟動

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

還缺一個service

2020/12/11 基于Istio實作微服務治理

比對的是bill-service

2020/12/11 基于Istio實作微服務治理

也就是這個

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

先建立istio-demo命名空間

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在有一個service

2020/12/11 基于Istio實作微服務治理

進入tomcat容器,curll一下service name來通路服務

2020/12/11 基于Istio實作微服務治理

傳回bill 1

2020/12/11 基于Istio實作微服務治理

2020/12/11 基于Istio實作微服務治理

第二個模型,背景要更新,現在是v2版本

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

建立這個資源

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在是兩個pod

2020/12/11 基于Istio實作微服務治理

但是現在通路基本上流量是均衡的

2020/12/11 基于Istio實作微服務治理

k8S服務是百分百的公式

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

通路的時候,第一步是域名解析,解析成ip位址

2020/12/11 基于Istio實作微服務治理

另外i一個pod其實也可以通路

2020/12/11 基于Istio實作微服務治理

解析出來是這樣

2020/12/11 基于Istio實作微服務治理

這個位址就是bill-service的clusterip位址

2020/12/11 基于Istio實作微服務治理

也就是這兩個是等價的

2020/12/11 基于Istio實作微服務治理

進pod容器看路由,這個是flannel的ip段

2020/12/11 基于Istio實作微服務治理

明顯沒有10.105.42的ip段

2020/12/11 基于Istio實作微服務治理

是以隻能轉發到gateway,10.244.2.1的網關上去

2020/12/11 基于Istio實作微服務治理

是在主機上的

2020/12/11 基于Istio實作微服務治理

也就是通路的流量,轉發到主控端上去 了

2020/12/11 基于Istio實作微服務治理

但是主控端沒有這個10段的路由

2020/12/11 基于Istio實作微服務治理

iptale裡有這個實作,位址是10.105.42.173位址的流量,都轉發到KUBE-SVC-PK4BNTKC2

2020/12/11 基于Istio實作微服務治理

多了一個random轉發 ,0.5百分之50機率轉發到KUBE-SEP-HMSXX67,剩下的轉發到另外一個

2020/12/11 基于Istio實作微服務治理

兩個pod,多了DNAT,轉發到pod上

2020/12/11 基于Istio實作微服務治理

coredns維護的規則,你改不了,是希望流量都均分的,但是如果要90,10%就需要istio了

2020/12/11 基于Istio實作微服務治理

現在每個pod都隻有一個容器

2020/12/11 基于Istio實作微服務治理

現在需要在服務裡加上sidecar,inject注入

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

生成了一堆的yaml檔案

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

注入後的yaml,前面都沒變

2020/12/11 基于Istio實作微服務治理

影響功能的在spec裡

2020/12/11 基于Istio實作微服務治理

這是一部分

2020/12/11 基于Istio實作微服務治理

從這裡開頭

2020/12/11 基于Istio實作微服務治理

到這裡

2020/12/11 基于Istio實作微服務治理

額外加了istio-proxy名字的容器,也就是所謂的邊車容器

2020/12/11 基于Istio實作微服務治理

還加了一個初始化的容器,執行了一些指令,這個容器執行後就退出了,就是做了一些iptable規則

2020/12/11 基于Istio實作微服務治理

直接部署

2020/12/11 基于Istio實作微服務治理

在原來的基礎上加上了istio的邊車容器

2020/12/11 基于Istio實作微服務治理

前端,和v2版本都注入一下

2020/12/11 基于Istio實作微服務治理

等于一個小的網格,現在有三個節點

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

規則怎麼寫是一個點,流量如何區分兩個版本不同

2020/12/11 基于Istio實作微服務治理

一般定義一個destnation-rule,destnation-rule是區分兩組服務的,起個名字,然後命名空間

2020/12/11 基于Istio實作微服務治理

subset相當于一組,下面定義了一個數組,第一組v1,比對的是version =v1的,第二組v2

2020/12/11 基于Istio實作微服務治理

不能比對所有的v1,v2,是比對前面的bill-service下的v1,v2

2020/12/11 基于Istio實作微服務治理

這樣就在istio内部,給這兩個pod起了名字

2020/12/11 基于Istio實作微服務治理

下面就要定義轉發規則了,定義virtualservice,是用來加規則的

2020/12/11 基于Istio實作微服務治理

hosts是bill-service-route,http流量,下面是route路由

2020/12/11 基于Istio實作微服務治理

權重90的目的地是bill-service下的v1,權重10放bill-service下的v2

2020/12/11 基于Istio實作微服務治理

建立好這個規則後,就等于告訴網格内的服務,找bill-service這樣的名稱的,都會按照這個路由規則走。90%的流量走v1,10%流量走v2

實作一下

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

先建立destnation-rule

2020/12/11 基于Istio實作微服務治理

vs就是virtualservice縮寫

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

從前端的pod裡通路bill-service的服務

一定要選擇-c進入到哪個容器裡

2020/12/11 基于Istio實作微服務治理

網格内部去通路bill-service,大概是9比1 的關系

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

了解envoy

9比1的規則是virtualservice定義的

2020/12/11 基于Istio實作微服務治理

最終影響到這個pod的是十分複雜的

2020/12/11 基于Istio實作微服務治理

如果是nginx,就是這麼配置的

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

加了兩個容器,istio-init,istio-proxy

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

進入到istio-proxy看一下

2020/12/11 基于Istio實作微服務治理

envoy其實是一個代理,輕量級的代理

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

通過K8S的api建立一個service,存儲到ETCD裡

2020/12/11 基于Istio實作微服務治理

istiod會去watch我們建立的virtualservice規則

2020/12/11 基于Istio實作微服務治理

每個pod都增加一個envoy,istio容器,istiod感覺到使用者建立的規則後,由istiod的server端把配置同步到envoy

2020/12/11 基于Istio實作微服務治理

envoy的配置檔案肯定和建立的virtualservice規則是不一樣的,格式是不一樣的,istiod是做轉換用的

2020/12/11 基于Istio實作微服務治理

istiod監聽到建立的virtualservice規則

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

大緻了解一些envoy

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

nginx也是代理,envoy也是代理

2020/12/11 基于Istio實作微服務治理

現在看nginx如何遷移到envoy

2020/12/11 基于Istio實作微服務治理

上面是nginx配置,下面是envoy配置,nginx的server在envoy裡叫監聽器

2020/12/11 基于Istio實作微服務治理

location就是路由

2020/12/11 基于Istio實作微服務治理

在envoy裡叫過濾器

2020/12/11 基于Istio實作微服務治理

最核心的這個,可以過濾http請求,把一些包轉換成http的格式

2020/12/11 基于Istio實作微服務治理

、流量到了filter後,經過route_config,後面有一些比對條件

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

proxy和upstream對應envoy的叢集

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

也就是nginx的配置都可以轉換成envoy的配置,envoy裡有一些概念

2020/12/11 基于Istio實作微服務治理

轉發後的envoy配置檔案如下

2020/12/11 基于Istio實作微服務治理

envoy會啟動一個端口,作為管理端口

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

後面都是envoy的配置

2020/12/11 基于Istio實作微服務治理

起了一個監聽器listener_0,監聽本地10000端口

2020/12/11 基于Istio實作微服務治理

擷取的流量交給filter_chains來處理

2020/12/11 基于Istio實作微服務治理

比對斜杠做一個路由,轉發到some_service這樣一個cluster叢集上去,類似nginx的upstream

2020/12/11 基于Istio實作微服務治理

service是什麼,是下面clusters定義的

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

啟動envoy1.15.2的版本,這個yaml檔案放到容器裡/etc/envoy/envoy.yaml

2020/12/11 基于Istio實作微服務治理

期望轉到service的cluster-ip是10.105.42.173

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

envoy就是個代理

2020/12/11 基于Istio實作微服務治理

核心的概念,就是監聽器

2020/12/11 基于Istio實作微服務治理

filter_chains裡有http_connection_manager,處理http流量,比對路由規則,轉發到cluster上去

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

配置雲上ELB,SLB,也是要配置監聽器,加上路由轉發規則

envoy核心的概念XDS

2020/12/11 基于Istio實作微服務治理

、靜态配置就是yaml檔案,動态配置就是可以通過接口從别的地方動态擷取到了

2020/12/11 基于Istio實作微服務治理

監聽器其實是可以動态的,L(listener)D(discover)S(service),

2020/12/11 基于Istio實作微服務治理

還有一個配置是RDS,route的配置也可以動态的,不用寫死

CDS也是可以動态的

2020/12/11 基于Istio實作微服務治理

EDS也可以動态

2020/12/11 基于Istio實作微服務治理

LDS,RDS,CDS,EDS統稱為XDS,X代表變量,這些就是envoy适合雲環境下的特性,所有環境都是不固定的,資訊是存到etcd裡去的

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

**最核心的就是listener,cluster,route,endpoint,也就是lds,cds,rds。eds

**

2020/12/11 基于Istio實作微服務治理

全都是通過xds接口去擷取的,envoy可以動态擷取配置來提供服務

2020/12/11 基于Istio實作微服務治理

從client發起流量,發到listener之上,經過lds,cds,eds,就會知道讓請求通路哪個endpoint位址,然後最終到真正提供服務的機器上去

2020/12/11 基于Istio實作微服務治理

下面是listener替換的部分,listener filter是改一些中繼資料的(可以不去看),監聽器裡有filter_chains

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

使用envoy的,就是有請求,通過監聽器,通過route轉發給cluster,最終把請求轉發給提供服務的機器上去,配置不僅僅可以是靜态還可以是動态的,xds可以滿足

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

envoy其實就是一個代理

2020/12/11 基于Istio實作微服務治理

對于K8S來講,envoy就是istio-proxy容器裡的程序,可以監控流量,可以進行熔斷,追溯

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

envoy隻是一種能力,你需要服務端才能去提供接口告訴envoy,可以通過着接口擷取什麼資料,istio裡的pilot轉眼間就提供了xds服務端接口的實作。

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

裡面有一個pilot-discover服務,這個程序其實就提供了envoy服務所需要的xds服務接口,也就是xds的服務端

2020/12/11 基于Istio實作微服務治理

工作原理

2020/12/11 基于Istio實作微服務治理

看看問題1,envoy的動态配置長什麼樣子

2020/12/11 基于Istio實作微服務治理

這個就是envoy、的管理端口

2020/12/11 基于Istio實作微服務治理

envoy需要一個配置檔案

2020/12/11 基于Istio實作微服務治理

有一段管理配置,監聽端口和位址

2020/12/11 基于Istio實作微服務治理

通路端口其實可以擷取一些内容

2020/12/11 基于Istio實作微服務治理

envoy的資訊可以從這裡擷取

2020/12/11 基于Istio實作微服務治理

下載下傳envoy的配置

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這個配置檔案非常長

2020/12/11 基于Istio實作微服務治理

700多KB的配置

2020/12/11 基于Istio實作微服務治理

幾個大點最主要的配置

2020/12/11 基于Istio實作微服務治理

這一個内容就比較複雜

2020/12/11 基于Istio實作微服務治理

現在在網格内部,沒注入istio,是先解析bill-serviceip位址,路由到主機上,通路9999端口

2020/12/11 基于Istio實作微服務治理

注入之後就是這麼走的了

2020/12/11 基于Istio實作微服務治理

如果是在前端tomcat通路的,流量會轉到istio-proxy這個容器裡,它去把流量轉發到不同版本的服務

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

istio-init就是去修改iptables規則

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

iptables,4表5鍊

2020/12/11 基于Istio實作微服務治理

流量進去prerouting鍊,是input鍊還是forward鍊看是否是本機位址,

2020/12/11 基于Istio實作微服務治理

本機的流量會到本機的堆棧,然後轉發到output鍊,轉到postrouting鍊

2020/12/11 基于Istio實作微服務治理

istio-proxy如果要進行流量的管理,一定要攔截tomcat的流量,也就是istio-proxy在自己的postrouting加個規則就可以攔截請求了,如何去攔截請求就是istio-init要做的,初始化iptables規則

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

istio做了一次iptables的封裝

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

-p是重定向所有tcp出站流量,也就是所有的出站流量轉發到15001上,-z所有進入pod/vm的tcp流量應該被重定向到的端口(預設$INBOUND_CAPTURE_PORT)

2020/12/11 基于Istio實作微服務治理

攔截了所有的出站和入站

2020/12/11 基于Istio實作微服務治理

最後就放了一個,有一個uid,這個使用者,優化自己的請求,放到15090,15021,15020的端口i上,除此之外所有請求攔截

2020/12/11 基于Istio實作微服務治理

現在id是0,發起請求

2020/12/11 基于Istio實作微服務治理

一定會被攔截到,因為不符合條件,不符合uid是1337發起的,也不是通路的15090,15021,15020,是以istio會進行攔截

2020/12/11 基于Istio實作微服務治理

上面的這條規則其實就是下面的描述,15090是做prometheus的telemetry,15020是做ingress,15021是做監控檢查的

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

如果攔截了,就等于自己攔截自己的,進入死循環了

2020/12/11 基于Istio實作微服務治理

**istio-init就是初始化iptable規則,讓istio-proxy這個容器攔截出站入站流量

**

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

可以看istio-proxy裡的規則,在slava1上

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

找到這個程序對應的pid

2020/12/11 基于Istio實作微服務治理

iptables規則是在pod設定的,是有獨立的網絡空間的

2020/12/11 基于Istio實作微服務治理

可以進入到網絡空間,檢視規則

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

prerouting是來入棧的。轉到了15006

2020/12/11 基于Istio實作微服務治理

tcp規則,轉到了istio_inbound規則,所有入站tcp流量跳轉到istio_inbound上

2020/12/11 基于Istio實作微服務治理

除了這幾個端口之外的,剩下的都轉到了istio_in_redirect裡

2020/12/11 基于Istio實作微服務治理

這裡是-d生成的

2020/12/11 基于Istio實作微服務治理

排除了不是業務的流量,都轉到15006端口,envoy隻需要監聽15006端口,拿到這個入站流量

2020/12/11 基于Istio實作微服務治理

-p是出站流量

2020/12/11 基于Istio實作微服務治理

所有出站流量轉發到了istio_output

2020/12/11 基于Istio實作微服務治理

這樣就攔截了每個pod的流量

2020/12/11 基于Istio實作微服務治理

15001是攔截所有出站的。15006是攔截所有入站的

2020/12/11 基于Istio實作微服務治理

業務的流量直接被轉到了istio-proxy,經過處理,發送到業務端,業務端istio-proxy監聽的是15006(接收所有入站)

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

是被15001攔截到了,如何轉發,envoy有監聽器,filter_chains

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這個指令可以隻拿到關心的片段

2020/12/11 基于Istio實作微服務治理

出站是15001攔截的,(兩個端口15006,15001)

2020/12/11 基于Istio實作微服務治理

在front-tomcat發請求,在istio-proxy被攔截,就要到istio-proxy檢視這個pod的監聽器

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

全部的太長了,很難找

2020/12/11 基于Istio實作微服務治理

例子,可以檢視端口

2020/12/11 基于Istio實作微服務治理

有一個15001的,這裡是一個縮寫

2020/12/11 基于Istio實作微服務治理

出現了一個15001的監聽器,但是沒有做處理

2020/12/11 基于Istio實作微服務治理

使用原始的IP位址和端口

2020/12/11 基于Istio實作微服務治理

對流量隻是做了通過,并沒有做其他處理

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這個請求其實是被15001攔截到了

2020/12/11 基于Istio實作微服務治理

流量隻是做了passthroughcluster處理

2020/12/11 基于Istio實作微服務治理

15001不處理,轉給了服務本身的9999端口

2020/12/11 基于Istio實作微服務治理

正常裡面會有下面的一個監聽器

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

檢視監聽器的樣子

2020/12/11 基于Istio實作微服務治理

rds是動态的路由,監聽器轉到了9999route上去了

2020/12/11 基于Istio實作微服務治理

名字就叫9999

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這一項看起就是,比對所有轉發到passthroughcluster,但是我們的請求現在不會到這,還有一個比這個更比對的

2020/12/11 基于Istio實作微服務治理

上面比對的是,隻有找不到下面的時候才會去找上面*

2020/12/11 基于Istio實作微服務治理

如果沒有*号,就無法通路外網了,是以一定要加個放行的

2020/12/11 基于Istio實作微服務治理

prefix,比對字首

2020/12/11 基于Istio實作微服務治理

這裡的規則都轉換成了istio的規則

2020/12/11 基于Istio實作微服務治理

weightedcluster基于權重的cluster

2020/12/11 基于Istio實作微服務治理

要查這兩個名稱的cluster

2020/12/11 基于Istio實作微服務治理

cluster提供了一個fqdn幫你去查

2020/12/11 基于Istio實作微服務治理

現在查endpoint,不知道怎麼查可以-h,檢視幫助

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

v1是90%流量的

2020/12/11 基于Istio實作微服務治理

port 80端口

2020/12/11 基于Istio實作微服務治理

104是v2

2020/12/11 基于Istio實作微服務治理

lds(listener),rds(route),cds(clsuter)eds(endpoint)

先查linstener轉route,通過route找cluster

流量被istio-proxt的15001監聽到,15001并不做處理,直接轉發給原始的ip+端口,監聽到9999端口的流量才轉發給9999端口的服務,就轉發到了cluster

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

找到endpoint的位址以後,等于從istio-proxy内部,envoy curl這個位址

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

但是發起請求後,怎麼到pod,還需要走網絡,是一個pod的ip位址,在flannel網絡可以看到路由

2020/12/11 基于Istio實作微服務治理

這裡的istio-proxy是在prerouting鍊上做了攔截,最終由direct轉到15006

2020/12/11 基于Istio實作微服務治理

15006要先查監聽器,-h幫助,查是–port

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

轉換成json

2020/12/11 基于Istio實作微服務治理

inbound入站請求

2020/12/11 基于Istio實作微服務治理

入站直接交給15006處理

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

15006這裡有入站監聽器,這個監聽器是按端口比對的

2020/12/11 基于Istio實作微服務治理

也有一個route,處理都交給比對的cluster後面對應的endpoint

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

比對80,轉到route上去了

2020/12/11 基于Istio實作微服務治理

轉到本機的來提供服務

2020/12/11 基于Istio實作微服務治理

建立了一些virtualservice規則,被istiod 識别到,最終轉變成了envoy能夠識别的配置片段,然後通過istiod的server端。同步到了service端,才能使流量的方向發生變化。envoy的配置片段可以通過 istio config-dump檢視,可以檢視route,cluster,endpoint

2020/12/11 基于Istio實作微服務治理

envoy小知識

意思是這兩個pod進行通路,pod裡有兩個容器,提供服務的容器,以及envoy容器,從productpage這個容器去curl review:9080,然後流量先到達iptable,(注入的時候,通過初始化容器,有iptable配置),有個配置output鍊上轉發到了istio_output,轉到了istio_redirect。通過15001(這個端口是被envoy監聽的,virtualoutbound ,這是一個listener,)轉發到一個orginal的監聽器上,比對到0.0.0.0_9080,經過filter_chains,開始做處理,轉到一個route上,找到一個endpoint ip+端口。

轉到後端的pod,(後端的envoy監聽在prerouting鍊上,轉到istio_in_redirect鍊上),15006端口進行處理,找到inbound cluster來進行處理

2020/12/11 基于Istio實作微服務治理

具體的流程還是要istioctl pc來查

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

到tomcat容器去curl

2020/12/11 基于Istio實作微服務治理

在istio-proxy容器裡沒有按照91的比例走

2020/12/11 基于Istio實作微服務治理

因為這個uid是1337,這個1337的請求并不會被iptable攔截,不攔截就不會到自己的裡面去做處理,不走envoy就等于在網格外部一樣

2020/12/11 基于Istio實作微服務治理

**它走的還是主控端上的kube-proxy維護的iptable的網絡過程,走到主控端上,主控端依靠flannel做的iptable轉發走了

**

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

把着幾個kube-proxy幹掉,是否會受影響,但是用scale是不行的

2020/12/11 基于Istio實作微服務治理

可以這麼看,看yaml

2020/12/11 基于Istio實作微服務治理

這裡有一個标簽

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這樣一個沒有,就自動退出了

2020/12/11 基于Istio實作微服務治理

清理一下nat

2020/12/11 基于Istio實作微服務治理

沒有這個規則了

2020/12/11 基于Istio實作微服務治理

這樣按照剛才的理論,在istio網格内部就通路不到主控端了,是直接iistio envoy去攔截了這個流量

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

真正去通路的時候其實是pod的IP

2020/12/11 基于Istio實作微服務治理

清空slave1上的iptable規則

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

還是可以通路的

2020/12/11 基于Istio實作微服務治理

master再去清理一下

2020/12/11 基于Istio實作微服務治理

現在在容器的istio-proxy裡

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在把kube-proxy已經停止了,主控端上的iptable規則已經删除了cluster規則

删除一個pod試試

2020/12/11 基于Istio實作微服務治理

到外網連結一下

2020/12/11 基于Istio實作微服務治理

剛才沒删除之前應該有解析的緩存

2020/12/11 基于Istio實作微服務治理

容器内部是可以通路到,解析不了,才到主控端上,但是主控端IPtable規則沒有,還可以通路到,可能有一點問題

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

所有的service都建立了虛拟監聽器

2020/12/11 基于Istio實作微服務治理

在pod裡去通路服務

2020/12/11 基于Istio實作微服務治理

正常是可以通路到的,這個通路是走的istio的監聽

2020/12/11 基于Istio實作微服務治理

istio内部,在叢集裡的每一個service都建立了一個監聽器

2020/12/11 基于Istio實作微服務治理

服務網格istio出現之前就有9000端口的service了

2020/12/11 基于Istio實作微服務治理

下面是service的ip+端口

2020/12/11 基于Istio實作微服務治理

istio是把整個service,加上istio的manager

2020/12/11 基于Istio實作微服務治理

最終轉到下面的route、

2020/12/11 基于Istio實作微服務治理

查route可以用r

2020/12/11 基于Istio實作微服務治理

可以轉換成json看一下

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

domain。比對/,轉到cluster上去,找到endpoint

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這裡都是之前的service建立的監聽規則,服務越多listner越長,絕大多數都是outbound的一些監聽

2020/12/11 基于Istio實作微服務治理

istio不希望再去用kube-proxy,直接可以在網格内部去管理iptable規則,控制流量

2020/12/11 基于Istio實作微服務治理

隻要是在網格裡面都有

2020/12/11 基于Istio實作微服務治理

因為istio本身并不知道你這個pod需要去通路哪個服務

這些都是動态維護的,envoy的配置有靜态動态,動态的都是根據istiod這個服務

2020/12/11 基于Istio實作微服務治理

這是一個istio的動态的服務端,是gRPC的服務端

2020/12/11 基于Istio實作微服務治理

轉換成envoy的配置段轉發給envoy

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

使用ingress-gateway通路網格服務

現在是這樣的場景,使用者端90%流量去通路v1版本, 10%流量去通路v2版本,實作這樣的,就是去建立一個v2版本的pod,同時建立virtualservice虛拟服務去實作

2020/12/11 基于Istio實作微服務治理

selector是app:front-tomcat

2020/12/11 基于Istio實作微服務治理

下面是deployment檔案

2020/12/11 基于Istio實作微服務治理

app是front-tomcat會被之前的調用到,版本v2

2020/12/11 基于Istio實作微服務治理

需要做的就是建立虛拟服務,通過front-tomcat在istio網格内部去通路到hosts。front-tomcat流量都經過它去比對,根據route的配置進行轉發,90到v1,10到v2

2020/12/11 基于Istio實作微服務治理

如何區分不同的機器組就是去建立destinationRule,destinationRule其實就是一組cluster

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

重點是host

2020/12/11 基于Istio實作微服務治理

先啟動v2的deployment和service,和上下文的規則

2020/12/11 基于Istio實作微服務治理

這是建立的virtualservice

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

需要注入istio

2020/12/11 基于Istio實作微服務治理

這裡是1沒有注入

2020/12/11 基于Istio實作微服務治理

不注入的話從前端通路,待會從前端去通路,通過ingress去通路,就沒辦法在網格内部

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在通路8080應該是9比1 的流量

2020/12/11 基于Istio實作微服務治理

現在可以從界面上去通路服務

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在通路的ingress是走的它的上面

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在是1比1,沒有按照istiod的規則來走

2020/12/11 基于Istio實作微服務治理

通過ingress去通路的話,不會按照istiod的規則去通路

2020/12/11 基于Istio實作微服務治理

因為istio裡面去通路

2020/12/11 基于Istio實作微服務治理

現在是在主控端上去通路不是在網格内部,注入的istio-proxy容器裡是網格内部,現在主控端走的是網格外部,走的是kube-proxy的iptable

2020/12/11 基于Istio實作微服務治理

前端頁面也是走的ingress,沒有走istio,就沒有意義,現在要在前端也走istio而不是kube-proxy

2020/12/11 基于Istio實作微服務治理

ingress隻能簡單的引流外部的http流量,這裡的目的就是凸顯了ingress的局限性

2020/12/11 基于Istio實作微服務治理

就需要用到ingressgateway

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

mesh boundary是網格内部,外部流量如果想要進入網格内部的一些規則。需要通過ingress gateway元件,引入到mesh gateway也就是sidecar。同樣的流量出去,istio内部要去通路網格外部需要通過egress gateway,但是不是必須的,類似curl 百度,直接就可以curl,管理不了抽象的流量

2020/12/11 基于Istio實作微服務治理

又說了ingress壞話,隻支援http的流量。任何進階功能對于ingress來講實作起來都很麻煩(因為需要重新功能,還不能在同一個ingress裡)

2020/12/11 基于Istio實作微服務治理

現在外部通路還是輪詢1比1通路内部

2020/12/11 基于Istio實作微服務治理

一個叢集内部,ingressgateway可以有多個

2020/12/11 基于Istio實作微服務治理

要去找ingressgateway的

2020/12/11 基于Istio實作微服務治理

有這樣istio=ingressgateway這樣的一個label

2020/12/11 基于Istio實作微服務治理

這個規則就是,定義了這樣一個gateway,是由帶istio=ingressgateway的這樣一個label的pod來處理,ingressgateway有多個,這樣就可以在叢集裡指定找哪個ingressgateway來處理請求

2020/12/11 基于Istio實作微服務治理

**建立上面這樣的資源在K8S裡的時候,就等于在istio的ingress網關上加了一條規則,這條規則就是允許tomcat.istio-demo.com的http流量進入到網格内部,通過帶有istio=ingressgateway的網關來去處理,也就是tomcat.istio-demo.com的流量轉到下面的pod是可以被接收的,也就是按照istio的規則去處理

**

2020/12/11 基于Istio實作微服務治理

添加一個Gateway(kind),允許hosts的http流量,從網格外部流入

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

隻是允許流量進來後,發送到哪裡,需要前面定義的virtualservice,virtualserivice可以和網關一起使用

2020/12/11 基于Istio實作微服務治理

和前面建立的virtualservice唯一的差別就是,指定好了網關,先建立了一個允許tomcat.istio-demo.com流量進來的網關,下面建立的virtualservice綁定了這個網關,進來的流量就按照路由去比對,90%比對到front-tomcat,10%front-tomcat,和之前的virtualservice唯一的差別就是加了gateway綁定,也就是隻有gateway來的流量才适用于這個規則,之前沒有綁定gateway,意思就是在整個網格内部都會受影響,按照這個規則去走

2020/12/11 基于Istio實作微服務治理

gateway沒有就是一個通用的規則,也就是在istio網格内部去通路【front-tomcat】,就會按照這個virtualservice去走

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在讓外部流量進來,就做了gateway的規則

2020/12/11 基于Istio實作微服務治理

tomcat.istio-demo.com的http流量可以進入ingress gateway來處理

2020/12/11 基于Istio實作微服務治理

下面的virtualservice綁定gateway

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

隻有從這個我網關過來的流量才能進入這個規則,其他外部請求會被拒絕

2020/12/11 基于Istio實作微服務治理

現在網關已經建立出來了

2020/12/11 基于Istio實作微服務治理

建立規則

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這個virtualservice隻給front-tomcat-gateway用

2020/12/11 基于Istio實作微服務治理

隻有gateway過來的流量才會應用這條規則

2020/12/11 基于Istio實作微服務治理

如果是從其他pod發出的請求不從front-tomcat-gateway網關過來,就不會受上面規則的影響

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

隻要這個域名的流量轉到ingressgateway上去了

2020/12/11 基于Istio實作微服務治理

轉到這個pod上去了

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在請求這個域名要想讓ingressgateway來處理

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

loadbalancer建立了很多port。,3079指向了80

2020/12/11 基于Istio實作微服務治理

-oyaml

2020/12/11 基于Istio實作微服務治理

這裡有一個http的port

2020/12/11 基于Istio實作微服務治理

擷取端口用這個指令

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在是9比1的關系

-H 域名 位址+端口

2020/12/11 基于Istio實作微服務治理

ingress gateway服務就是這個位址

2020/12/11 基于Istio實作微服務治理

加上解析

2020/12/11 基于Istio實作微服務治理

加上端口就可以通路,90%的流量在v1,10%的流量在v2

2020/12/11 基于Istio實作微服務治理

但是通路80端口。還是1比1

2020/12/11 基于Istio實作微服務治理

現在通路30779其實就是通路istio内部的提供的ingressgateway處理請求

2020/12/11 基于Istio實作微服務治理

但是這個端口就不好看,可以找個nginx代理,或者找個雲服務的lb,clb,elb都行

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

建立一個鏡像

2020/12/11 基于Istio實作微服務治理

換個位址解析

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

gateway隻選擇這個域名

2020/12/11 基于Istio實作微服務治理

這樣通路就進不去

2020/12/11 基于Istio實作微服務治理

通過域名就可以

2020/12/11 基于Istio實作微服務治理

監聽域名,代理1.1版本

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在外部可以通路,但是nginx容器裡通路不通

2020/12/11 基于Istio實作微服務治理

改成69,也就是本機主控端

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在就可以了,9比1

2020/12/11 基于Istio實作微服務治理

前面加上nginx,發生問題也可以友善追蹤,但是現實也是最起碼買個雲的LB去代理

2020/12/11 基于Istio實作微服務治理

流量路由

外部流量進來,簡單來說,其實在istio網格内部,不用ingress了改成了ingressgateway,原來給ingress-controller流量都傳給了ingressgateway

2020/12/11 基于Istio實作微服務治理

先轉到nginx來進行反代,因為之前加的ingressgateway允許這個域名的http服務,來使用這個ingress

2020/12/11 基于Istio實作微服務治理

服務到這個ingress之後

2020/12/11 基于Istio實作微服務治理

建立了virtualservice,綁定到了gateway上去,進一步去比對virtualservice規則

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在看一個新的執行個體,這是一個書店

2020/12/11 基于Istio實作微服務治理

建立一個名稱空間

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

productpage相當于前端一個應用,這個應用會通路後面的reviews服務(v1版本不會去調用rating服務,v2,v3會調用ratings服務)和details服務

2020/12/11 基于Istio實作微服務治理

給product page建立一個ingress

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

都是9080端口

2020/12/11 基于Istio實作微服務治理

現在可以現在外部直接用K8S原來的ingress通路

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

通路product page頁面的時候,detail和review是的服務

2020/12/11 基于Istio實作微服務治理

review本身還會去調用rating服務

2020/12/11 基于Istio實作微服務治理

連續通路productpage,review會在三個版本之間随機的

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

**想要實作流量管控就需要放到istio裡去,需要注入sidecar

**

2020/12/11 基于Istio實作微服務治理

先用istioctl kube-inject 注入指定的yaml,然後kubectl再去apply。這種方式是在名稱空間裡,給指定的pod去注入。(也就是可以有已經在istio的服務,也可以有不在istio的服務)

2020/12/11 基于Istio實作微服務治理

還有一種方式是這樣的,給命名空間打label。比如在default名稱空間打了一個istio-injection=enabled,那以後隻要在default裡部署服務,都會幫你注入

2020/12/11 基于Istio實作微服務治理

現在還是按pod注入

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在變成1/2就代表注入了,原來是1/1

2020/12/11 基于Istio實作微服務治理

這個就代表envoy,每個pod都注入一個envoy

2020/12/11 基于Istio實作微服務治理

外部用ingressenvoy去通路

2020/12/11 基于Istio實作微服務治理

建立一個gateway,這個gateway還是用指定的ingressgateway

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

productpage-gateway,讓productpage.bookinfo域名的流量進入網格内部

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在是建立了一個gw

2020/12/11 基于Istio實作微服務治理

這個域名進入網格内部

2020/12/11 基于Istio實作微服務治理

建立virtualservice,綁定這個gateway

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在是有一條規則,允許這個gateway來的流量通路hosts

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

如果不想review是随機的,想要隻看到review3,那就需要在後面加配置

2020/12/11 基于Istio實作微服務治理

現在是product service去通路了review服務

2020/12/11 基于Istio實作微服務治理

首先需要建立virtualservice,所有通路reviews的流量都走下面路由

2020/12/11 基于Istio實作微服務治理

建立一個destination-rule

2020/12/11 基于Istio實作微服務治理

建立vs,通路review服務就轉到v3版本

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

reviews是沒有gateway的

2020/12/11 基于Istio實作微服務治理

現在重新整理就全部是紅星的v3版本了

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

不考慮時效性可以這麼做

2020/12/11 基于Istio實作微服務治理

現在就通路不到v3了

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

假如v2版本是多個執行個體會如何調用

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

envoy的lbs,rds,cds,eds,雖然有三個副本,但是eds的時候隻選擇其中一個、

2020/12/11 基于Istio實作微服務治理

流量在這裡就route裡已經配置設定好了,就跟後面有多少副本就沒關系了

2020/12/11 基于Istio實作微服務治理

回歸到一個副本

2020/12/11 基于Istio實作微服務治理

現在要實作下面的常見,bookinfo.com大服務通路review就通路review服務

2020/12/11 基于Istio實作微服務治理

首先要允許這個新域名進入服務網格,就需要gateway

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這裡其實是一個數組

2020/12/11 基于Istio實作微服務治理

兩個域名現在都允許進入網格内部

2020/12/11 基于Istio實作微服務治理

根據path路徑進行轉發,還需要定義規則,一般絕大多數規則都是在virtualservice裡定義的

2020/12/11 基于Istio實作微服務治理

從gateway來的流量,是通路bookinfo.com這個域名的流量按照下面的規則轉發

2020/12/11 基于Istio實作微服務治理

比對uri,如果是/productpage開頭的就路由到productpage上去,如果要細分還可以轉發給哪個版本什麼的流量

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

從productpage-gateway的轉發的bookinfo.com流量轉發給bookinfo

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這裡就可以通路

2020/12/11 基于Istio實作微服務治理

通路ratings的9080 是可以通路到的

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

樣式通路不到了

2020/12/11 基于Istio實作微服務治理

需要加個下劃線

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在就可以了

2020/12/11 基于Istio實作微服務治理

通路productpage這個路由會自動幫你拼接到後端對應的service監聽端口/路由

2020/12/11 基于Istio實作微服務治理

是以這就是為什麼要加static

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

如果服務隻有一個端口其實可以不用寫

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

如果一個服務有多個端口,可以指向其中的一個

2020/12/11 基于Istio實作微服務治理

如果不想ratings區通路ratings,想rate去通路ratings,在原來基礎上加個rewrite,比對路徑就換了

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

其實即使通路這個

2020/12/11 基于Istio實作微服務治理

如果說想要一個使用者專門通路一個版本,就可以做灰階釋出,登陸裡就會在headler裡填寫一堆資料,kv對

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

可以加一個default-route,match比對不到就走預設路由

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

登陸之後會有一個header資訊

2020/12/11 基于Istio實作微服務治理

先暫時不管灰階釋出,先看一下下destination-rule

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

之前把v2版本的review換成了三個副本,那麼10%的流量到後端後該如何去轉發,那麼這個政策就是在destination-rule裡加的

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

預設規則是随機random

2020/12/11 基于Istio實作微服務治理

使用https,建議是放在ingress這一層(一般用公有雲的lb,比如slb,clb),還可以放在istio側使用證書

2020/12/11 基于Istio實作微服務治理

我們使用istio做灰階釋出,也是用header來轉發的

2020/12/11 基于Istio實作微服務治理

登陸之後,都會去帶上這個資訊

2020/12/11 基于Istio實作微服務治理

通路reviews服務的時候

2020/12/11 基于Istio實作微服務治理

假如現在登陸的使用者是路飛,想要讓他隻通路review2,其他的轉發到review3上

2020/12/11 基于Istio實作微服務治理

那就是要寫virtualservice規則。如果headers出現key是end-user裡有)exact準确的就是完全等于)路飛的話就比對到下面的路由上

2020/12/11 基于Istio實作微服務治理

否則剩下的就通路下面的

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在admin就隻能分發到v3,是紅星

2020/12/11 基于Istio實作微服務治理

登陸一下路飛

2020/12/11 基于Istio實作微服務治理

隻能通路到v2版本

2020/12/11 基于Istio實作微服務治理

這裡還支援以什麼開頭,甚至支援正規表達式

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

virtualservice的uri看到的,也是用的準确比對,也可以字首,或者正規表達式

2020/12/11 基于Istio實作微服務治理

還支援scheme,http或者https

2020/12/11 基于Istio實作微服務治理

get還是post方法

2020/12/11 基于Istio實作微服務治理

這個是httpv2的協定

2020/12/11 基于Istio實作微服務治理

headers就是之前用的,也支援正規表達式

2020/12/11 基于Istio實作微服務治理

還支援查詢參數

2020/12/11 基于Istio實作微服務治理

withoutheaders沒有這些資訊

2020/12/11 基于Istio實作微服務治理

不是路飛這個使用者的就通路這裡,是路飛這個使用者的就通路下面

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

流量鏡像和重試

流量鏡像是非常厲害的功能,因為做壓力測試的時候很難模拟一套線上的資料。流量鏡像,就很大限度的解決了這個問題。是在不影響線上環境的前提下将線上流量持續的鏡像到我們的預釋出環境中去,讓重構的服務結實的收到一波真實的沖擊,同時預釋出服務也表現出真實的處理能力

2020/12/11 基于Istio實作微服務治理

流量進入線上服務,同時發給預釋出環境一份

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

先建立一個httpv1的服務

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

注入

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

合理有一個url,headers

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

準備v2版本

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

注入

2020/12/11 基于Istio實作微服務治理

建立一個service

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

istio建立規則少不了service,一定要建立service,因為virtualservice全是比對servicename

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在httpbin是通路不到的

2020/12/11 基于Istio實作微服務治理

需要添加規則

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

在default路由前加一下即可

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在隻是建立了服務,還沒有建立規則,destinationRule

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在就通路到了

2020/12/11 基于Istio實作微服務治理

headers就通路到這裡了

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

檢視一下日志

2020/12/11 基于Istio實作微服務治理

v2現在肯定還沒有流量,因為都在v1上

2020/12/11 基于Istio實作微服務治理

現在就可以開始做流量鏡像

2020/12/11 基于Istio實作微服務治理

可以調整多少流量打過去

2020/12/11 基于Istio實作微服務治理

istio支援管理多叢集,不同叢集的服務可以通過這樣的一種通用的來管理的

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在重新整理一下頁面

2020/12/11 基于Istio實作微服務治理

現在就有流量了

2020/12/11 基于Istio實作微服務治理

還可以重試,很多都是從代碼層面來進行重試邏輯的,重試的本身這種需求,是和業務無關的,是一種通用的需求。istio可以幫你去實作重試的邏輯

2020/12/11 基于Istio實作微服務治理

當服務端傳回502的時候,可以重試

2020/12/11 基于Istio實作微服務治理

現在通路,傳回的是502

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

它自己從代理端就幫你重試了

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

通路server端傳回是5XX的時候,重試三次

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

5xx的時候進行重試

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

通路一次400

2020/12/11 基于Istio實作微服務治理

就一條記錄

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

重試三條

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

熔斷

過載保護

2020/12/11 基于Istio實作微服務治理

istio是通過envoy proxy來實作熔斷機制的。envoy強制在網絡層面配置熔斷政策,這樣就不必為了每個應用程式單獨配置或重新程式設計。如果從代碼層實作,可以實作一個callback,裡面可以寫邏輯。istio就沒法寫邏輯,因為沒法進入你的代碼。通常來講istio網絡中服務配置連結數和請求數用的是最多的

下面是httpbin去通路java app,可以在中間加一個熔斷配置

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

、先建立服務

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

注入一下

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

先用一個單線程的進行連結

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在用client去通路service,裡面有get方法,其實就是設定了兩個變量去發起請求

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在發送2個也是請求成功的

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

可以進行限制,是放在destinationrule裡的

2020/12/11 基于Istio實作微服務治理

http2是一個連結去發送多個請求,不像http1,是建立一個連結發送一個請求

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現線上程變成10就絕大多數是會失敗的,istio裡的熔斷更像是限流

2020/12/11 基于Istio實作微服務治理

上面的應用的配置其實就是改了envoy的這裡,envoy無法觸發callback邏輯,因為它不進入代碼

2020/12/11 基于Istio實作微服務治理

故障注入和逾時

2020/12/11 基于Istio實作微服務治理

故障注入就是原來你的服務是正常,可以在envoy這層,顯式的申明,通路details服務的時候,注入50%的故障,其實就是調試你的程式相容性。如果100%故障就是服務挂了,它就是為了實作你的程式挂了,整個叢集裡是否還正常工作

2020/12/11 基于Istio實作微服務治理

是通過兩類實作,abort是中止,delay是延遲

2020/12/11 基于Istio實作微服務治理

現在路飛使用者通路到review v2上面

2020/12/11 基于Istio實作微服務治理

現在要這樣,reviews去通路ratings這一層注入延遲2秒

2020/12/11 基于Istio實作微服務治理

建立一個virtualservice是跟ratings整個域名來進行通路的,有一個fault錯誤類型,也就是把通路rating服務100%流量,注入延遲2秒

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

所有通路rating服務的都注入一個延遲通路的故障,

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在就有延遲了

2020/12/11 基于Istio實作微服務治理

請求是兩秒多

2020/12/11 基于Istio實作微服務治理

注入的延遲配置最終展現在envoy裡

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

**可以加逾時時間,針對reviews v2的進行1秒逾時

**

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

逾時針對v2生效,v3無效

2020/12/11 基于Istio實作微服務治理

登入路飛使用者也是2秒,實際上是timout1秒,但是程式自己加了1秒逾時

2020/12/11 基于Istio實作微服務治理

這裡是1秒,它傳回的時候rating還沒有傳回

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這是一個延遲版的故障注入

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

還有狀态碼,把這個删除了就是故障了

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

代表50%紀律是500錯誤

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這裡就50%的幾率出錯了,也就是不用把服務停了模拟挂的情況

2020/12/11 基于Istio實作微服務治理

iptables規則失效排查

在istio網格内,流量請求完全繞過了kube-proxy元件

2020/12/11 基于Istio實作微服務治理

但是上次還能通路到

2020/12/11 基于Istio實作微服務治理

有幾個服務都跑在slave1上,清理掉slave1的規則,也就是kube-proxy清理的規則,去通路通道

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

排程到不存在的機器,也就是把kube-proxy清理掉

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

在主控端上清理掉iptables規則

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在通路不到

2020/12/11 基于Istio實作微服務治理

因為dns也是走的service流量,這個是走主控端iptables規則去解析到的,現在規則沒有了就解析不到了billservice了

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

直接通路ip可以通,是因為按照istio的走的

2020/12/11 基于Istio實作微服務治理

現在通路istio-proxy 是不通的,因為是走的主控端的iptales

2020/12/11 基于Istio實作微服務治理

印證了在istio-proxy(雖然是網格裡容器,但是通路外部是一摸一樣的),在front-tomcat容器裡,是走的envoy流量裡去

2020/12/11 基于Istio實作微服務治理

把删除的kube-proxy改過來了

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

可觀察性

在整個istio裡提供看的東西就grafana,jaeger(分布式追蹤),kiali(專門針對istio做的可視化元件),prometheus

2020/12/11 基于Istio實作微服務治理

istio自帶了這幾個yaml檔案,可以直接apply grafana

2020/12/11 基于Istio實作微服務治理

jaeger

2020/12/11 基于Istio實作微服務治理

需要改兩個位址

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這裡用的是grafana自帶的服務發現位址,預設是在istio名稱空間裡的

2020/12/11 基于Istio實作微服務治理

改成這個

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這幾個服務建立到了istio-system空間裡

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這些全是istio的

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

virtualservice加一個路由就是給服務發現服務路由,istio-proxy用的

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

istio在注入的時候已經幫你實作這個結構了

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這是在pod層面做監控

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

建立一個ingress

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

獲得域名

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

資料源都幫你配置好了

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這是istio内部,grafana實作的配置

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

發送請求

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

成功率百分百

2020/12/11 基于Istio實作微服務治理

mesh dashboard,可以監控服務流量,所有服務都在這裡

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在鍊路追蹤是放在sidecar裡的

2020/12/11 基于Istio實作微服務治理

envoy裡已經幫你配置好了

2020/12/11 基于Istio實作微服務治理

啟動的時候有1個配置檔案

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

建立jaeger的時候已經看到這個zipkin建立好了

2020/12/11 基于Istio實作微服務治理

這兩個都是追蹤jaeger服務的,envoy雖然配置了zipkin,但是還是通路tracing

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這裡有圖表展示對于關系

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

kiali

可觀測性分析服務

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

拿的是label裡帶app的

2020/12/11 基于Istio實作微服務治理

istio裡做的

2020/12/11 基于Istio實作微服務治理

product配置,穿過v1,通路到detail

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

點選其他的service也可以看到這些圖

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

traffic,是inbound和outbound,入站和出站流量

2020/12/11 基于Istio實作微服務治理

業務日志和istio-proxy日志

2020/12/11 基于Istio實作微服務治理

入站流量

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

內建了很多東西,日志,inbound,outbound

2020/12/11 基于Istio實作微服務治理

可以看一些service的基礎資訊

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這個是拿的資料,确定有沒有

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

小結

istio建立的規則,servicename必須依賴K8S實作的,istio的出現其實是微服務間的通訊的短闆

**K8S已經稱為容器排程編排的事實标準,容器正好可以作為微服務的最小工作單元,進而發揮微服務架Kubernets已經成為了容器排程編排的事實标準,而容器正好可以作為微服務的最小工作單元,進而發揮微服務架構的最大優勢。是以我認為未來微服務架構會圍繞Kubernetes展開。而lstio和Cnduit這類Service Mesh天生就是為了Kubernetes設計,它們的出現補足了Kubernetes在微服務間服務通訊。上的短闆。雖然Dubbo. SpringCloud等都是成熟的微服務架構,但是它們或多或少都會和具體語言或應用場景綁定,并隻解決了微服務Dev層面的問題。若想解決Ops問題,它們還需和諸如Cloud Foundry. Mesos、 Docker Swarm或Kubernetes這類資源調

度架構做結合:

**

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

laas層面是系統層面的,從這個上面是K8S支援的,springcloud是這麼支援,以後很長的時間都是K8S和istio

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

**總結一下:

第一代為spring cloud為代表的服務治理能力,是和業務代碼緊耦合的,沒法跨程式設計語言去使用

為了可以實作通用的服務治理能力,istio會為每個業務pod注入一個sidecar代理容器

**

提出了server mesh的理念,注入邊車去監控業務流量

2020/12/11 基于Istio實作微服務治理

接管業務pod的流量,是以通過注入的時候引入初始化容器istio=init實作pod内防火牆規則的初始化,分别将出入站流量攔截到pod内的15001和15006端口

2020/12/11 基于Istio實作微服務治理

-還注入了istio-proxy容器,一個是pilot-agent程序,一個是envoy,envoy是pilot-agent拉起來的,pilot-agent是一個info程序,先起來生成配置檔案-rev0,生成這個配置檔案後把envoy拉起來,啟動之後通過xds,再生成pilot,是istiod裡的pilot-service這個服務,也就是grpc的server端

2020/12/11 基于Istio實作微服務治理

virtualservice,destination rule,gateway,轉換和曾envoy可以識别的配置片段。通過xds同步到網格的envoy中

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

服務在productpage去curl這個位址,先給istio-init容器注入iptable規則,(output鍊轉到istio_output鍊轉到istio_redirect鍊)envoy監聽15001端口,出站轉到了0.0.0.0_端口這樣一個監聽上去,listener去讀filter chains,經過路由規則,比對到cluster,轉到endpoint,最終轉到pod的ip上

2020/12/11 基于Istio實作微服務治理

進入pod後被15006的envoy攔截,virrtual inbound做處理轉到cluster上去,轉到最終的endpoint

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

下面是整個過程,建立virtualservice,destination rule,endpoint

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

**envoy帶來的肯定網絡上更加複雜,還有額外的開銷,是否需要用還要自己考量。灰階釋出很簡單,建立virtual service,destination rule規則就好了

**

2020/12/11 基于Istio實作微服務治理

rancher安裝使用

用rancher還是比較多的,因為使用者不需要深入了解K8S

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

支援的版本

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

安裝很簡單就一句話

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

stable版本看一下,但是指定的為好

2020/12/11 基于Istio實作微服務治理

v2.5.2需要這樣配置,privileged,使用該參數,container内的root擁有真正的root權限。否則,container内的root隻是外部的一個普通使用者權限。privileged啟動的容器,可以看到很多host上的裝置,并且可以執行mount。甚至允許你在docker容器中啟動docker容器。

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

K3S是一個比K8S更輕量級的平台

2020/12/11 基于Istio實作微服務治理

可以用于物聯網邊緣計算設計

2020/12/11 基于Istio實作微服務治理

現在進行通路

2020/12/11 基于Istio實作微服務治理

設定密碼

2020/12/11 基于Istio實作微服務治理

選擇管理多叢集的rancher

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在rancher就是一個K3S叢集

2020/12/11 基于Istio實作微服務治理

可以了解為在裡面啟動了一個K3S叢集

2020/12/11 基于Istio實作微服務治理

預設起了一個K3S叢集

2020/12/11 基于Istio實作微服務治理

同樣把這叢集放到自己的管理頁面去了

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

複制到叢集裡去執行

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

儀表盤還可以看一些資源的使用

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

、可以執行指令行

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這裡也一樣可以

2020/12/11 基于Istio實作微服務治理

第一個概念就是項目,項目就是隸屬于叢集的有幾個項目

2020/12/11 基于Istio實作微服務治理

這個項目是命名空間上面的一層虛拟概念,這個項目是包含名稱空間的

2020/12/11 基于Istio實作微服務治理

default項目下包含一個default命名空間

2020/12/11 基于Istio實作微服務治理

有這麼多命名空間不屬于任何項目

2020/12/11 基于Istio實作微服務治理

可以選擇添加項目

2020/12/11 基于Istio實作微服務治理

可以把命名空間移動到這個項目裡

2020/12/11 基于Istio實作微服務治理

可以檢視工作負載

2020/12/11 基于Istio實作微服務治理

還有負載均衡

2020/12/11 基于Istio實作微服務治理

service,服務發現裡有選擇器

2020/12/11 基于Istio實作微服務治理

還可以部署服務

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

挂載卷

2020/12/11 基于Istio實作微服務治理

縮放更新政策,就是灰階更新

2020/12/11 基于Istio實作微服務治理

标簽就是加label加标簽

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

可以進容器進行curl

2020/12/11 基于Istio實作微服務治理

檢視日志

2020/12/11 基于Istio實作微服務治理

事件就是deployment的内容

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

建立好service,會有一個工作負載

2020/12/11 基于Istio實作微服務治理

可以添加使用者進行管理

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

沒有配置權限

2020/12/11 基于Istio實作微服務治理

假如想要通路dev環境下的項目,成員可以使用exec

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

現在就可以看到整個項目了

2020/12/11 基于Istio實作微服務治理

先建立使用者然後在某個叢集下添加使用者

2020/12/11 基于Istio實作微服務治理

、應用商店其實就是克隆的一些項目,es叢集還是其他的

2020/12/11 基于Istio實作微服務治理

還有devops操作,不過在2.5版本這裡廢棄了

2020/12/11 基于Istio實作微服務治理

使用了fleet,是一個devops工具

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

一直在報錯,看起來鏡像沒有拉取成功。dns解析不了

2020/12/11 基于Istio實作微服務治理

主控端上拉下來了

2020/12/11 基于Istio實作微服務治理

容器裡是container-creating,pod起不來

2020/12/11 基于Istio實作微服務治理

是用containerd管理,并不是docker管理

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

拉取鏡像失敗

2020/12/11 基于Istio實作微服務治理

主控端,有一個有一個rancher的pause鏡像

2020/12/11 基于Istio實作微服務治理

擷取到這個鏡像

2020/12/11 基于Istio實作微服務治理

把這個鏡像放到rancher裡

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

這個目錄裡有bin

2020/12/11 基于Istio實作微服務治理

列出它的鏡像

2020/12/11 基于Istio實作微服務治理

導入鏡像,k3s裡就是用ctr指令去管理containerd的

2020/12/11 基于Istio實作微服務治理

列出現在的鏡像

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理

內建了coredns

2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理
2020/12/11 基于Istio實作微服務治理