本文介紹如何通過ASM定義的虛擬服務和目標規則配合完成藍綠和灰階發布。
前提條件
- 建立至少一個ASM執行個體,詳情請參見建立ASM執行個體。
- 添加至少一個ACK叢集到ASM執行個體中,詳情請參見添加叢集到ASM執行個體。
- 部署Bookinfo應用樣本到ASM執行個體下管理的ACK叢集中,詳情請參見在ASM執行個體關聯的叢集中部署應用。
- 在ASM執行個體的ACK叢集中部署入口網關,詳情請參見建立入口網關。
建立目標規則
針對上述部署的Bookinfo樣本,建立所需的目標規則,詳情請參見管理目標規則。目標規則的配置資訊如下。
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: productpage
spec:
host: productpage
subsets:
- name: v1
labels:
version: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v3
labels:
version: v3
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: ratings
spec:
host: ratings
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v2-mysql
labels:
version: v2-mysql
- name: v2-mysql-vm
labels:
version: v2-mysql-vm
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: details
spec:
host: details
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2建立虛擬服務
針對上述部署的Bookinfo樣本,建立所需的虛擬服務,詳情請參見管理虛擬服務。虛擬服務的配置資訊如下。
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
spec:
hosts:
- details
http:
- route:
- destination:
host: details
subset: v1藍綠髮布v2版本
建立目標規則和虛擬服務後,reviews的v2版本已經在運行,但還沒有流量切換到v2版本,因此需要用藍綠部署的方式,讓v2版本上線。
針對上述部署的Bookinfo樣本,建立藍綠髮布v2版本的虛擬服務,詳情請參見管理虛擬服務。虛擬服務的配置資訊如下。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2部署完成後重新整理頁面,您可以看到book reviews已經有了評分,而且評分的星星為黑色。
按權重灰階發布v3版本
您可以讓v2、v3版本同時線上,且兩個版本各處理50%的流量。
針對上述部署的Bookinfo樣本,建立灰階發布v3版本的虛擬服務,詳情請參見管理虛擬服務。虛擬服務的配置資訊如下。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2
weight: 50
- destination:
host: reviews
subset: v3
weight: 50部署完成後重新整理頁面,可以看到book reviews一欄v2,v3版本隨機出現,v3版本的評分的星星為紅色。
按請求內容灰階發布v3版本
只按照流量來簡單的灰階還是不能滿足很多情境,您還可以按照使用者來灰階,不同的使用者訪問不同的頁面。
針對上述部署的Bookinfo樣本,建立灰階發布的虛擬服務,詳情請參見管理虛擬服務。虛擬服務的配置資訊如下。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v3
- route:
- destination:
host: reviews
subset: v2部署完成後重新整理頁面,評分區的星星始終為黑色。此時,您可以單擊右上方Sign in,以使用者名稱jason登入(不需要輸入密碼),您可以看到評分區的星星變成紅色。
說明 登入並訪問後端服務時,會帶上
end-user=XXX的http header,使用jason登入後,匹配到了YAML的規則,使得流量被引導到了v3版本的reviews。