1. 程式人生 > >《Istio官方文件》配置請求路由

《Istio官方文件》配置請求路由

原文連結 譯者:suzhuo

配置請求路由

這裡將向你展示如何根據權重和HTTP請求頭去配置動態路由。

“開始之前”

注意:這裡假設你正在Kubernetes上部署應用.所有例子的命令都使用yaml規則檔案的Kubernetes版本(例如:”samples/bookinfo/kube/route-rule-all-v1.yaml“).如果你正在一個不同的環境裡執行此任務時,需要將kube更改為與您的執行時相對應的目錄(例如:samples/bookinfo/consul/route-rule-all-v1.yaml 就是把kube替換成consul)

“基於內容的路由”

因為BookInfo中的示例部署了3個微服務評價的版本,因此我們需要去設定一個預設的路由,以便於讓我們準確請求.否則的話,你需要訪問好幾次該應用,你會注意到有時候會輸出帶星評級的評論,這是因為沒有設定一個精確的預設版本所造成的,Istio將以隨機方式將請求路由到所有可用的服務版本。

注意:此任務假設你還沒有任何路由,如果你已經針對示例建立了衝突的路由規則,在接下來的一個或兩個命令中,你需要使用replace(替換)而不是create(建立)命令.

1.將所有的微服務的預設版本設定為v1.

istioctl create -f samples/bookinfo/kube/route-rule-all-v1.yaml

注意:在Istio的Kubernetes部署過程中,你可以使用kubectl替換為上面的istioctl,以及所有其他CLI命令.但是請注意:當前的kubectl尚沒有提供輸入驗證

你可以列出被以下命令所定義好的路由:

istioctl get routerules -o yaml


apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: details-default
namespace: default

spec:
destination:
name: details
precedence: 1
route:
– labels:
version: v1

apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: productpage-default
namespace: default

spec:
destination:
name: productpage
precedence: 1
route:
– labels:
version: v1

apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: ratings-default
namespace: default

spec:
destination:
name: ratings
precedence: 1
route:
– labels:
version: v1

apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: reviews-default
namespace: default

spec:
destination:
name: reviews
precedence: 1
route:
– labels:
version: v1

由於到代理的規則傳播是非同步的,因此在嘗試訪問應用程式之前,應該等待幾秒鐘才能將規則傳播到所有群集。

2.在你的瀏覽器中開啟 BookInfo URL (http://$GATEWAY_URL/productpage)

您應該看到顯示BookInfo應用程式頁面.請注意,產品頁面顯示時並沒有評分星級,因為reviews:v1不能訪問評級服務。

3.將一個指定使用者請求路由到reviews:v2

讓我們通過將產品頁面流量路由到reviews:v2例項來啟用測試使用者”Jason”的分級服務

istioctl create -f samples/bookinfo/kube/route-rule-reviews-test-v2.yaml

確認已經生成路由規則:

istioctl get routerule reviews-test-v2 -o yaml

apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
name: reviews-test-v2
namespace: default

spec:
destination:
name: reviews
match:
request:
headers:
cookie:
regex: ^(.*?;)?(user=jason)(;.*)?$
precedence: 2
route:
– labels:
version: v2

4.在產品頁面web中使用”Jason”作為使用者登入

現在你應該在每個評論旁邊看到評級(1-5星).注意:如果你使用其他任何一個非Jason使用者,你將只能看到reviews:v1,而看不到評級內容.

理解這其中發生的緣由

在此任務中,使用Istio將完整的流量傳送到每個BookInfo服務的v1版本,然後設定一個規則,以有選擇的將流量傳送到基於一個請求的header(比如使用者的cookie),且版本為v2的評級服務上.

一旦v2版本被檢測到達到我們的預期,我們能夠以一種漸進的方式使用Istio將所有使用者傳送流量到v2,我們將在一個單獨的任務中繼續探討這個問題.

清除

  • 移除應用程式中的路由規則


istioctl delete -f samples/bookinfo/kube/route-rule-all-v1.yaml
istioctl delete -f samples/bookinfo/kube/route-rule-reviews-test-v2.yaml

  • 如果你不打算繼續探討接下來的任務,你可以引用BookInfo中的cleanup的說明去關閉這個應用

    瞭解更多