提供了一個全托管式的服務網格平台,相容于社群Istio開源服務網格,用于簡化服務的治理,包括服務調用之間的流量路由與拆分管理、服務間通信的認證安全以及網格可觀測性能力,進而極大地減輕開發與運維的工作負擔。本文是關于服務網格ASM流量治理相關的workshop。
前提條件
- 建立至少一個ASM執行個體,并添加至少一個ACK叢集到該執行個體中。詳情請參見 建立ASM執行個體 和 添加叢集到ASM執行個體 。
- 在ACK控制台擷取ACK的kubeconfig 和ASM控制台擷取ASM的kubeconfig
環境準備參考:
第一步: 在ASM控制台 ,建立網格執行個體:
第二步:添加kubernetes叢集到服務網格ASM
實踐内容
本文用到的
workshop用到的相關資源1.部署應用并注入Sidecar代理
(1) 在ASM控制台開啟Sidecar的自動注入或者
使用kubectl --kubeconfig asm_kubeconfig label default istio-injection = enabled
(2) 部署應用
kubectl --kubeconfig ack_kubeconfig apply -f app.yaml
今天示範應用的部署架構,包括産品服務、增值服務(包括三個版本)、産品詳情、風格轉換服務四個多語言開發的應用,包括一個Ingress 入口網關和一個外部服務,并且通過服務網格ASM注入了Sidecar代理。
應用增值服務V1
關于增值服務V2
關于增值服務V3
接下來的操作都可以使用ASM控制台或者Kubectl完成。
2.部署入口網關通路應用
使用控制台一鍵部署網關通路我們的應用。
部署網關
新增網關規則
使用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
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對應的文檔。
Mesh通路日志詳細記錄
Mesh通路日志監控中心
網格Prometheus監控名額
調用拓撲和調用鍊路
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
(2)在Sidecar管理控制通路外部服務
可以在服務網格ASM中設定對外部服務的通路政策OutboundTrafficPolicy,用于配置對外部服務(即未在Istio的内部服務系統資料庫中定義的服務)的通路政策。
- 如果該選項設定為ALLOW_ANY,則Sidecar代理允許對未知服務的透傳通過。優點是直接透傳對外部服務的通路,缺點是失去了對外部服務流量的網格層面的監視和控制。
- 如果該選項設定為REGISTRY_ONLY,則Sidecar代理将阻止任何沒有在網格中定義了HTTP服務或服務條目的主機
設定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也支援資料平面的熱更新能力,也在10月份在ASM控制台上推出。
歡迎使用服務網格ASM和加入服務網格ASM使用者交流群,有什麼問題歡迎溝通交流。