Istio學(xué)習(xí)記錄

最近被 react 虐得不行,想來(lái)點(diǎn)清真的。正好前幾個(gè)月參加阿里 RocketMQ 深圳技術(shù)講座,接觸到一個(gè)新詞:云原生應(yīng)用 ( Cloud Native Application )。而最近自己也在研究 Service Mesh,索性記錄一下自己的進(jìn)展。

之前大家一直說(shuō)微服務(wù),首當(dāng)其沖的微服務(wù)框架便是 Spring Cloud,之前一直用 Spring Boot,沒(méi)有太多用 Spring Cloud,課程倒是看了不少。之所以沒(méi)有用上它,一方面由于歷史原因,大多數(shù)項(xiàng)目用的基本都是 Dubbo(Dubbox) RPC 框架。很多項(xiàng)目想嘗試,后來(lái)又覺(jué)得改動(dòng)太大,用 Spring Boot 已經(jīng)是很不錯(cuò)的進(jìn)步了。

Spring Cloud功能上來(lái)說(shuō)是很強(qiáng)大,至少比 Dubbo功能豐富,涵蓋了服務(wù)發(fā)現(xiàn),服務(wù)治理,熔斷器,日志跟蹤,負(fù)載均衡等,但是如果真的要使用,大家是不是還要考慮 REST 性能與 RPC 的比較,以及 Spring Config 的配置管理是否適用現(xiàn)有項(xiàng)目等各種實(shí)際問(wèn)題,總感覺(jué)水土不服。

Spring Cloud 和 Dubbo 都屬于侵入型微服務(wù)框架,所以選型很重要,一旦用了就很難去改變。之前想把 Dubbo 改成 Spring Cloud ,后來(lái)發(fā)現(xiàn)那個(gè)代價(jià)不是一般高,服務(wù)還不能灰度上線。突然想起之前直接用 Protobuf+Netty 做推送,然后看了Dubbox 的代碼,底層是 Netty+Kryo,其實(shí)和我們之前做的差不多。

既然要說(shuō)Service Mesh,鋪墊也差不多了。Service mesh 譯作 ”服務(wù)網(wǎng)格“,作為服務(wù)間通信的基礎(chǔ)設(shè)施層。對(duì)比上述框架來(lái)說(shuō),是一種非侵入性框架或者基礎(chǔ)架構(gòu)。也就意味著微服務(wù)的那些東西就不用和業(yè)務(wù)代碼湊在一起,業(yè)務(wù)不用再去關(guān)心該用什么去做服務(wù)發(fā)現(xiàn),無(wú)論是自己用 zookeeper 實(shí)現(xiàn)一個(gè)簡(jiǎn)單服務(wù)發(fā)現(xiàn),還是用 etcd 來(lái)實(shí)現(xiàn),其實(shí)都是在增加業(yè)務(wù)代碼的復(fù)雜度。Service Mesh就不再重蹈覆轍,上述能力被下放到基礎(chǔ)架構(gòu)中,就像一個(gè)操作系統(tǒng)天生就可以完成網(wǎng)絡(luò)通訊一樣。

Service Mesh有以下特點(diǎn):

  1. 將服務(wù)發(fā)現(xiàn),重試/超時(shí),監(jiān)控,追蹤等下放到底層基礎(chǔ)架構(gòu)中。
  2. 對(duì)應(yīng)用程序透明,非侵入性
  3. 作為應(yīng)用間的透明網(wǎng)絡(luò)代理

目前比較流行的 Service Mesh 框架有 Istio 和 Linkerd,都可以和 K8S 進(jìn)行集成。

下面我們就來(lái)實(shí)踐一下Istio。

首先安裝 k8s ,如果覺(jué)得比較麻煩就直接安裝minikube(推薦),之后開(kāi)始安裝 istio,前方注意和諧上網(wǎng)。

curl -L https://git.io/getLatestIstio | sh -

然后添加到環(huán)境變量中

cd istio-0.x
export PATH=$PWD/bin:$PATH

前幾天還是0.5,現(xiàn)在已經(jīng)是0.6,更新還是比較迅速的。

下面就增長(zhǎng)開(kāi)始安裝:

~ kubectl apply -f install/kubernetes/istio.yaml

安裝成功之后確認(rèn)一下:

~ kubectl get pods -n istio-system

NAME                             READY     STATUS    RESTARTS   AGE
istio-ca-97bddb669-b7xrx         1/1       Running   4          11d
istio-ingress-777786fbcd-tvtdf   1/1       Running   8          11d
istio-mixer-c976b8854-m4nqg      3/3       Running   12         11d
istio-pilot-776bb8cb7f-7h95b     2/2       Running   8          11d

istio就安裝成功了,下面來(lái)安裝bookinfo官方示例。

~ kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/kube/bookinfo.yaml)

確認(rèn)一下:

~ kubectl get pods

NAME                             READY     STATUS    RESTARTS   AGE
details-v1-56cf65ddc7-vz4pr      2/2       Running   12         11d
productpage-v1-b64876bc7-gfp9p   2/2       Running   12         11d
ratings-v1-cccf67989-mjb95       2/2       Running   12         11d
reviews-v1-846fd9c945-8xmqg      2/2       Running   12         11d
reviews-v2-74f5547679-bj6zv      2/2       Running   12         11d
reviews-v3-8d889d8d5-lqc27       2/2       Running   12         11d

下面獲取網(wǎng)關(guān)地址,這里不同的安裝方式獲取地址的方式是不一樣的,這里只演示 minikube。

~  export GATEWAY_URL=$(kubectl get po -l istio=ingress -n istio-system -o 'jsonpath={.items[0].status.hostIP}'):$(kubectl get svc istio-ingress -n istio-system -o 'jsonpath={.spec.ports[0].nodePort}')

~ echo $GATEWAY_URL                                                                                                                                                             
192.168.99.100:32705

然后在瀏覽器中訪問(wèn) http://192.168.99.100:32705/productpage 就可以看到 BookInfo 主界面。

istio 有 Intelligent Route,下面也來(lái)體驗(yàn)一下:

先查看一下路由信息

 ~ istioctl get routerules -o yaml                                                                                                                                        
 No resources found.

導(dǎo)入 v1路由信息

 ~/Downloads/istio-0.5.0  istioctl create -f samples/bookinfo/kube/route-rule-all-v1.yaml                                                                                          

Created config route-rule/default/productpage-default at revision 62564
Created config route-rule/default/reviews-default at revision 62565
Created config route-rule/default/ratings-default at revision 62566
Created config route-rule/default/details-default at revision 62567

 ~/Downloads/istio-0.5.0  istioctl get routerules -o yaml                                                                                                                          

apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
  creationTimestamp: null
  name: details-default
  namespace: default
  resourceVersion: "62567"
spec:
  destination:
    name: details
  precedence: 1
  route:
  - labels:
      version: v1
---
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
  creationTimestamp: null
  name: productpage-default
  namespace: default
  resourceVersion: "62564"
spec:
  destination:
    name: productpage
  precedence: 1
  route:
  - labels:
      version: v1
---
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
  creationTimestamp: null
  name: ratings-default
  namespace: default
  resourceVersion: "62566"
spec:
  destination:
    name: ratings
  precedence: 1
  route:
  - labels:
      version: v1
---
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
  creationTimestamp: null
  name: reviews-default
  namespace: default
  resourceVersion: "62565"
spec:
  destination:
    name: reviews
  precedence: 1
  route:
  - labels:
      version: v1
---

網(wǎng)頁(yè)上顯示為Book Reviews

下面我們替換為 v2路由

 ~/Downloads/istio-0.5.0  istioctl create -f samples/bookinfo/kube/route-rule-reviews-test-v2.yaml

Created config route-rule/default/reviews-test-v2 at revision 62803
 ~/Downloads/istio-0.5.0  istioctl get routerule reviews-test-v2 -o yaml 

apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
  creationTimestamp: null
  name: reviews-test-v2
  namespace: default
  resourceVersion: "62803"
spec:
  destination:
    name: reviews
  match:
    request:
      headers:
        cookie:
          regex: ^(.*?;)?(user=jason)(;.*)?$
  precedence: 2
  route:
  - labels:
      version: v2
---

然后登錄jason賬戶,密碼隨意,發(fā)現(xiàn)比 v1多了五星評(píng)價(jià)功能,這不就是 ABTest嗎,還是比較 6 的。

其他功能就不再演示了,主要有下面這些,官網(wǎng)都有:

之后打算用一下這個(gè)試一下,感覺(jué)還不錯(cuò)的樣子,最后 友情提示一下官方推薦用 Google Kubernetes Engine,但是最好還是本地弄,反正我試了幾次都是有問(wèn)題的,可能是 RP 問(wèn)題。

對(duì)了,還有新開(kāi)的博客地址:http://www.couldme.com。哈哈。

參考文檔

1.minikube 安裝指南

2.istio 安裝指南

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,553評(píng)論 19 139
  • 敖小劍/數(shù)人云資深架構(gòu)師 十五年軟件開(kāi)發(fā)經(jīng)驗(yàn),微服務(wù)專家,專注于基礎(chǔ)架構(gòu),Cloud Native擁護(hù)者,敏捷實(shí)踐...
    優(yōu)云數(shù)智閱讀 971評(píng)論 0 3
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,272評(píng)論 6 342
  • 前幾天寫餃子,寫涼皮,寫面....很多小伙伴都說(shuō)一邊流著哈喇子一邊內(nèi)心過(guò)個(gè)癮。大家開(kāi)始猜想我是哪里人?不賣關(guān)子,“...
    肉都給我吃閱讀 1,083評(píng)論 20 4
  • 那個(gè)坡 長(zhǎng)大后沒(méi)去過(guò) 上小學(xué) 體育課也是在那上的 長(zhǎng)大后只想躲在家里 如果我有一間 獨(dú)立的房 我不會(huì)經(jīng)常出來(lái) 長(zhǎng)大...
    翔于閱讀 129評(píng)論 0 0

友情鏈接更多精彩內(nèi)容