使用Istio資源實現(xiàn)版本流量路由
版本流量路由是指將流量按照比例路由到服務(wù)的不同版本,適用于灰度發(fā)布和A/B測試等場景。本文介紹如何使用Istio資源實現(xiàn)版本流量路由。
前提條件
步驟一:創(chuàng)建網(wǎng)關(guān)規(guī)則
網(wǎng)關(guān)規(guī)則(Gateway)定義了在網(wǎng)格出入口操作的負(fù)載均衡器,用于接收傳入或傳出的HTTP/TCP連接。下文介紹如何創(chuàng)建網(wǎng)關(guān)規(guī)則,并將其綁定到入口網(wǎng)關(guān)。
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標(biāo)實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 ,然后單擊創(chuàng)建。
在創(chuàng)建頁面,進(jìn)行以下配置,然后單擊創(chuàng)建。
關(guān)于配置項的詳情,請參見網(wǎng)關(guān)規(guī)則(Gateway)CRD說明。
配置項
說明
基本信息
配置命名空間為default,網(wǎng)關(guān)規(guī)則的名稱為bookinfo-gateway。
作用網(wǎng)關(guān)實例
配置標(biāo)簽名為istio,標(biāo)簽值為ingressgateway。
對外提供服務(wù)
配置名稱為http,端口為80,協(xié)議為HTTP,服務(wù)為*。
以上配置對應(yīng)的網(wǎng)關(guān)規(guī)則YAML如下。
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: bookinfo-gateway namespace: default spec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - '*'
步驟二:創(chuàng)建虛擬服務(wù)
虛擬服務(wù)(VirtualService)定義流量路由規(guī)則和請求轉(zhuǎn)發(fā)策略。創(chuàng)建虛擬服務(wù)后,您可以通過/productpage、/static、/login、/logout、/api/v1/products路徑訪問Bookinfo應(yīng)用。
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標(biāo)實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 ,然后單擊創(chuàng)建。
在創(chuàng)建頁面,進(jìn)行以下配置,然后單擊創(chuàng)建。
關(guān)于配置項的詳情,請參見虛擬服務(wù)(Virtual Service)CRD說明。
配置項
說明
基本信息
命名空間
本示例選擇default。
名稱
自定義虛擬服務(wù)的名稱。
作用范圍
打開作用于指定網(wǎng)關(guān)規(guī)則開關(guān),單擊請選擇網(wǎng)關(guān)規(guī)則。
在請選擇網(wǎng)關(guān)規(guī)則對話框,選中bookinfo-gateway,單擊圖標(biāo),然后單擊確定。
關(guān)閉作用于所有Sidecar開關(guān)。
所屬服務(wù)
單擊選擇所屬網(wǎng)關(guān)服務(wù)域名,在選擇所屬網(wǎng)關(guān)服務(wù)域名對話框,選中*,單擊圖標(biāo),然后單擊確定。
HTTP路由
路由名稱
單擊HTTP路由,單擊添加路由,自定義路由名稱。
請求匹配規(guī)則
重復(fù)單擊添加請求匹配規(guī)則,配置如下五條規(guī)則:
打開匹配請求的URI開關(guān),配置匹配方式為精確,匹配內(nèi)容為/productpage。
打開匹配請求的URI開關(guān),配置匹配方式為前綴,匹配內(nèi)容為/static。
打開匹配請求的URI開關(guān),配置匹配方式為精確,匹配內(nèi)容為/login。
打開匹配請求的URI開關(guān),配置匹配方式為精確,匹配內(nèi)容為/logout。
打開匹配請求的URI開關(guān),配置匹配方式為前綴,匹配內(nèi)容為/api/v1/products。
路由目的地
單擊添加路由目的地,配置服務(wù)名稱為productpage,端口為9080。
以上配置對應(yīng)的虛擬服務(wù)YAML如下。
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: vs-demo namespace: default spec: hosts: - '*' http: - name: gw-to-productage match: - uri: exact: /productpage - uri: prefix: /static - uri: exact: /login - uri: exact: /logout - uri: prefix: /api/v1/products route: - destination: host: productpage port: number: 9080 gateways: - bookinfo-gateway
步驟三:訪問Bookinfo應(yīng)用
獲取入口網(wǎng)關(guān)地址。
方式一:通過ASM控制臺
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標(biāo)實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在入口網(wǎng)關(guān)頁面,獲取服務(wù)地址。
方式二:通過容器服務(wù)管理控制臺
登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在服務(wù)頁面頂部,選擇命名空間為istio-system,在External IP列,查看istio-ingressgateway對應(yīng)的80端口的IP地址。
在瀏覽器地址欄,輸入http://{入口網(wǎng)關(guān)服務(wù)的IP地址}/productpage,持續(xù)刷新頁面10次,訪問Bookinfo應(yīng)用。
Bookinfo應(yīng)用會訪問reviews服務(wù)的v1、v2、v3版本。您可以看到reviews服務(wù)三個版本出現(xiàn)的比例接近1:1:1。
步驟四:創(chuàng)建版本路由規(guī)則
創(chuàng)建目標(biāo)規(guī)則,按版本給reviews服務(wù)進(jìn)行分組,分為v1、v2、v3子集。
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標(biāo)實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 ,然后單擊創(chuàng)建。
在創(chuàng)建頁面,進(jìn)行以下配置,然后單擊創(chuàng)建。
關(guān)于配置項的詳情,請參見目標(biāo)規(guī)則(Destination Rule)CRD說明。
配置項
說明
基本信息
配置命名空間為default,自定義目標(biāo)規(guī)則的名稱,配置服務(wù)名稱為reviews。
服務(wù)版本(子集)
單擊服務(wù)版本(子集),重復(fù)單擊添加服務(wù)版本(子集),配置如下三個版本。
版本1:配置版本名稱為v1,單擊添加標(biāo)簽,配置標(biāo)簽名為version,標(biāo)簽值為v1。
版本2:配置版本名稱為v2,單擊添加標(biāo)簽,配置標(biāo)簽名為version,標(biāo)簽值為v2。
版本3:配置版本名稱為v3,單擊添加標(biāo)簽,配置標(biāo)簽名為version,標(biāo)簽值為v3。
以上配置對應(yīng)的目標(biāo)規(guī)則YAML如下。
apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: reviews namespace: default labels: {} spec: host: reviews subsets: - name: v1 labels: version: v1 - name: v2 labels: version: v2 - name: v3 labels: version: v3
創(chuàng)建虛擬服務(wù),將10%流量路由到reviews服務(wù)的v1版本,40%流量路由到reviews服務(wù)的v2版本,50%流量路由到reviews服務(wù)的v3版本。
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標(biāo)實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 ,然后單擊創(chuàng)建。
在創(chuàng)建頁面,進(jìn)行以下配置,然后單擊創(chuàng)建。
配置項
說明
基本信息
命名空間
本示例選擇default。
名稱
自定義虛擬服務(wù)的名稱。
作用范圍
打開作用于所有Sidecar開關(guān)。
所屬服務(wù)
單擊添加所屬服務(wù),在添加所屬服務(wù)對話框,配置命名空間為default,在添加所屬服務(wù)區(qū)域,選中reviews服務(wù),單擊圖標(biāo),然后單擊確定。
HTTP路由
路由名稱
單擊HTTP路由,單擊添加路由,自定義路由名稱。
路由目的地
重復(fù)單擊添加路由目的地,配置如下三個路由目的地。
配置服務(wù)名稱為reviews,版本為v1,權(quán)重為10。
配置服務(wù)名稱為reviews,版本為v2,權(quán)重為40。
配置服務(wù)名稱為reviews,版本為v3,權(quán)重為50。
以上配置對應(yīng)的虛擬服務(wù)YAML如下。
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: reviews namespace: default spec: hosts: - reviews.default.svc.cluster.local http: - name: route route: - destination: host: reviews subset: v1 weight: 10 - destination: host: reviews subset: v2 weight: 40 - destination: host: reviews subset: v3 weight: 50
步驟五:驗證版本流量路由是否成功
在瀏覽器地址欄,輸入http://{入口網(wǎng)關(guān)服務(wù)的IP地址}/productpage,持續(xù)刷新頁面10次。
若reviews服務(wù)的v1、v2、v3三個版本出現(xiàn)的比例接近1:4:5,表明版本流量路由成功。