天天看點

ASM workshop-基于服務網格ASM的流量治理實踐部分

阿裡雲服務網格(Alibaba Cloud Service Mesh,簡稱ASM)

提供了一個全托管式的服務網格平台,相容于社群Istio開源服務網格,用于簡化服務的治理,包括服務調用之間的流量路由與拆分管理、服務間通信的認證安全以及網格可觀測性能力,進而極大地減輕開發與運維的工作負擔。本文是關于服務網格ASM流量治理相關的workshop。

前提條件

環境準備參考:

第一步: 在ASM控制台 ,建立網格執行個體:

ASM workshop-基于服務網格ASM的流量治理實踐部分

第二步:添加kubernetes叢集到服務網格ASM

ASM workshop-基于服務網格ASM的流量治理實踐部分

實踐内容

本文用到的

workshop用到的相關資源

1.部署應用并注入Sidecar代理

(1) 在ASM控制台開啟Sidecar的自動注入或者

使用kubectl --kubeconfig asm_kubeconfig label default istio-injection = enabled 

ASM workshop-基于服務網格ASM的流量治理實踐部分

(2) 部署應用

 kubectl --kubeconfig ack_kubeconfig apply -f app.yaml

今天示範應用的部署架構,包括産品服務、增值服務(包括三個版本)、産品詳情、風格轉換服務四個多語言開發的應用,包括一個Ingress 入口網關和一個外部服務,并且通過服務網格ASM注入了Sidecar代理。

ASM workshop-基于服務網格ASM的流量治理實踐部分

應用增值服務V1

ASM workshop-基于服務網格ASM的流量治理實踐部分

關于增值服務V2

ASM workshop-基于服務網格ASM的流量治理實踐部分

關于增值服務V3

ASM workshop-基于服務網格ASM的流量治理實踐部分

接下來的操作都可以使用ASM控制台或者Kubectl完成。

2.部署入口網關通路應用

使用控制台一鍵部署網關通路我們的應用。

部署網關

ASM workshop-基于服務網格ASM的流量治理實踐部分

新增網關規則 

使用ASM控制台或者Kubectl

kubectl --kubeconfig asm_kubeconfig apply -f gateway.yaml

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: demo-default-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"      

新增虛拟服務

kubectl --kubeconfig asm_kubeconfig apply -f gateway_virtualservice.yaml

ASM workshop-基于服務網格ASM的流量治理實踐部分
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: demo
spec:
  hosts:
  - "*"
  gateways:
  - demo-default-gateway
  http:
  - match:
    - uri:
        exact: /productpage
    - uri:
        exact: /login
    - uri:
        exact: /logout
    - uri:
        prefix: /static    
    - uri:
        prefix: /api/v1/products
    route:
    - destination:
        host: productpage.default.svc.cluster.local
        port:
          number: 9080      

3.基于ASM完成藍綠和灰階釋出

kubectl --kubeconfig asm_kubeconfig apply -f addedvalues_DestinationRule.yaml

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: addedvalues
spec:
  host: addedvalues
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  - name: v3
    labels:
      version: v3      

50%流量到addedvaluesV1,50%流量到addedvaluesV2

kubectl --kubeconfig asm_kubeconfig apply -f addedvalues_VirtualService_v1_50_v2_50.yaml

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

100%流量到addedvaluesV2

kubectl --kubeconfig asm_kubeconfig apply -f addedvalues_VirtualService_v1_0_v2_100.yaml

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: addedvalues
spec:
  hosts:
  - addedvalues
  http:
  - route:
    - destination: 
        host: addedvalues
        subset: v1
      weight: 0
    - destination:
        host: addedvalues
        subset: v2
      weight: 100      

4.支援多種流量治理能力以故障注入為例

故障注入使得調用ddedvalues服務時傳回400

kubectl --kubeconfig asm_kubeconfig apply -f addedvalues_VirtualService_v1_v2_fault.yaml

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: addedvalues
spec:
  hosts:
  - addedvalues
  http:
  - fault:
        abort:
          httpStatus: 400
          percentage:
            value: 100
    route:
        - destination:
            host: addedvalues
            subset: v1
          weight: 50
        - destination:
            host: addedvalues
            subset: v2
          weight: 50      

将yunqi開頭的使用者流量切到addedvaluesV3

kubectl --kubeconfig asm_kubeconfig apply -f addedvalues_VirtualService_v3.yaml

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: addedvalues
spec:
  hosts:
    - addedvalues
  http:
    - match:
        - headers:
            end-user:
              prefix: yunqi
      route:
        - destination:
            host: addedvalues
            subset: v3
          weight: 100
    - fault:
        abort:
          httpStatus: 400
          percentage:
            value: 100
      route:
        - destination:
            host: addedvalues
            subset: v1
          weight: 50
        - destination:
            host: addedvalues
            subset: v2
          weight: 50      

4. 服務網格ASM可觀測性開箱即用

在服務網格SM控制台功能設定頁面一鍵開啟可觀測性能力,具體可以參考ASM對應的文檔。

ASM workshop-基于服務網格ASM的流量治理實踐部分

Mesh通路日志詳細記錄

ASM workshop-基于服務網格ASM的流量治理實踐部分

Mesh通路日志監控中心

ASM workshop-基于服務網格ASM的流量治理實踐部分

網格Prometheus監控名額

ASM workshop-基于服務網格ASM的流量治理實踐部分

調用拓撲和調用鍊路

ASM workshop-基于服務網格ASM的流量治理實踐部分
ASM workshop-基于服務網格ASM的流量治理實踐部分

5. 服務網格ASM支援零信任安全

(1)控制服務通路,隻允許default下應用查詢addedvalues

各種零信任安全能力也支援kubectl或者表單操作

kubectl --kubeconfig asm_kubeconfig apply -f addedvalues_AuthorizationPolicy_allow.yaml

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-default
  namespace: default
spec:
 selector:
    matchLabels:
      app: addedvalues
  action: ALLOW
  rules:
    - from:
        - source:
            namespaces:
              - default
      to:
        - operation:
            methods:
              - GET      
ASM workshop-基于服務網格ASM的流量治理實踐部分

(2)在Sidecar管理控制通路外部服務

可以在服務網格ASM中設定對外部服務的通路政策OutboundTrafficPolicy,用于配置對外部服務(即未在Istio的内部服務系統資料庫中定義的服務)的通路政策。

  • 如果該選項設定為ALLOW_ANY,則Sidecar代理允許對未知服務的透傳通過。優點是直接透傳對外部服務的通路,缺點是失去了對外部服務流量的網格層面的監視和控制。
  • 如果該選項設定為REGISTRY_ONLY,則Sidecar代理将阻止任何沒有在網格中定義了HTTP服務或服務條目的主機
ASM workshop-基于服務網格ASM的流量治理實踐部分

設定REGISTRY_ONLY後由于V3依賴了外部服務,是以V3無法通路,加入下面的ServiceEntry後通路正常。

kubectl --kubeconfig asm_kubeconfig apply -f ServiceEntry.yaml

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-svc-styletransfer
spec:
  hosts:
  - apply.mcard.boc.cn
  location: MESH_EXTERNAL
  ports:
  - number: 443
    name: https
    protocol: HTTPS
  resolution: NONE      

(3)還有很多其他功能,大家可以參考服務網格ASM的官方文章,包括控制入口網關的通路,OPA政策等等。

6.服務網格ASM生命周期管理

阿裡雲服務網格(Alibaba Cloud Service Mesh,簡稱ASM)提供了一個全托管式的服務網格平台,相容于社群Istio開源服務網格,标準統一,并且可以實作控制平面的平滑更新和資料面的熱更新能力。

控制平面一鍵平滑更新

ASM workshop-基于服務網格ASM的流量治理實踐部分

資料平面更新

 資料平面可以選擇應用釋出滾動更新到目前控制面對應的資料面最新版本。

ASM workshop-基于服務網格ASM的流量治理實踐部分

同時服務網格ASM也支援資料平面的熱更新能力,也在10月份在ASM控制台上推出。

ASM workshop-基于服務網格ASM的流量治理實踐部分

歡迎使用服務網格ASM和加入服務網格ASM使用者交流群,有什麼問題歡迎溝通交流。

ASM workshop-基于服務網格ASM的流量治理實踐部分