雲原生架構(三)簡單樣例

2022-12-16 18:00:17

系列目錄

雲原生架構(一)原理概覽

雲原生架構(二)環境搭建

雲原生架構(三)簡單樣例

雲原生架構(四)原始碼詳解

雲原生架構(五)總結提高

一、目標&準備

1.1 目標

前兩節,我們學習了雲原生架構Istio的原理概覽、環境搭建。要快速熟悉一個技術架構,最快的方式是先跑起來。這一節我們以Istio服務網格的能力,驗證微服務間的流量管理、可觀測性

注:本節參照Istio官網--任務相關章節實現,飛機票。

1.2 準備

我們以Istio官方自帶的bookinfo(第二節Istio自帶的samples)作為樣例工程,來做流量管理和觀測性的測試。樣例工程Bookinfo 應用分為四個單獨的微服務:

  • productpage. 這個微服務會呼叫 detailsreviews 兩個微服務,用來生成主頁面
  • details. 這個微服務中包含了書籍的詳情資訊。
  • reviews. 這個微服務中包含了書籍相關的評論。分3個版本,V1啥都不呼叫;V2 呼叫ratings,返回黑色星星V3呼叫ratings,返回紅色星星
  • ratings. 這個微服務中包含了由書籍評價組成的評級資訊。

應用架構如下:

前面一節,我們命令列開啟kiali服務監控:

istioctl dashboard kiali

存取幾次「書主頁」:http://127.0.0.1/productpage,再重新整理kiali監控。

二、功能測試

2.1 強制流量路由到指定版本

執行以下命令以應用 Virtual Service:

kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml

我們想要把bookinfo的服務流量都路由到V1版本,來看下yaml設定內容:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: productpage
spec:
  hosts:
  - productpage
  http:
  - route:
    - destination:
        host: productpage
        subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
  - ratings
  http:
  - route:
    - destination:
        host: ratings
        subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService//虛擬服務
metadata:
  name: details//屬性-名稱:details
spec:
  hosts:
  - details
  http:
  - route:
    - destination://路由到 details域名的v1子集
        host: details
        subset: v1 
---
VirtualService用以指定一組流量路由規則。例如從:A(hosts)->B(host+subset)。開啟http://127.0.0.1/productpage存取:

如上圖,Reviews裡面沒有星星,按照專案介紹,應該是存取V1版本的服務。多重新整理幾次,一直都是這個,不會切換成星星(V2、V3)了。

開啟kiali監控->Graph->namespace選擇default,看到服務流量全部存取的是V1版本的。如下圖:

ok,到這裡,《強制流量路由》驗證成功!

2.2 流量轉移

 上面我們嘗試把流量強制轉移到V1版本,這一次,我們嘗試把reviews服務,50%流量匯入v1,50%匯入v3,命令如下:

kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml

內容如下:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route://  v1 50%   v3  50%
    - destination:
        host: reviews
        subset: v1
      weight: 50
    - destination:
        host: reviews
        subset: v3
      weight: 50

多存取幾次bookinfo頁面:http://127.0.0.1/productpage,發現reviews評價內容,在紅色星星(V3)和無星星(V1)之間跳轉。檢視kiali監控,如下圖:

如上圖,reviews服務,v1和v3,基本就在50%左右跳轉。驗證通過!