流量轉移
此任務說明如何將流量從一個微服務版本轉移到另一個版本。
常見的用例是將流量從較舊版本的微服務逐步移轉到新版本。在 Istio 中,您可以透過設定一系列路由規則來達成此目標,這些規則會將一定百分比的流量從一個目的地重新導向到另一個目的地。
在此任務中,您會將 50% 的流量傳送到 reviews:v1
,50% 的流量傳送到 reviews:v3
。然後,您會將 100% 的流量傳送到 reviews:v3
來完成移轉。
開始之前
套用基於權重的路由
- 首先,執行此命令將所有流量路由至
v1
版本
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
$ kubectl apply -f @samples/bookinfo/gateway-api/route-reviews-v1.yaml@
在您的瀏覽器中開啟 Bookinfo 網站。網址為
http://$GATEWAY_URL/productpage
,其中$GATEWAY_URL
是入口的外部 IP 位址,如 Bookinfo 文件中所述。請注意,無論您重新整理多少次,頁面的評論部分都不會顯示評分星號。這是因為您已將 Istio 設定為將評論服務的所有流量路由到
reviews:v1
版本,而此版本的服務無法存取星級評分服務。使用以下命令將 50% 的流量從
reviews:v1
轉移到reviews:v3
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml@
$ kubectl apply -f @samples/bookinfo/gateway-api/route-reviews-50-v3.yaml@
- 請稍候幾秒鐘,讓新規則傳播,然後確認規則已取代
$ kubectl get virtualservice reviews -o yaml
apiVersion: networking.istio.io/v1
kind: VirtualService
...
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
weight: 50
- destination:
host: reviews
subset: v3
weight: 50
$ kubectl get httproute reviews -o yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
...
spec:
parentRefs:
- group: ""
kind: Service
name: reviews
port: 9080
rules:
- backendRefs:
- group: ""
kind: Service
name: reviews-v1
port: 9080
weight: 50
- group: ""
kind: Service
name: reviews-v3
port: 9080
weight: 50
matches:
- path:
type: PathPrefix
value: /
status:
parents:
- conditions:
- lastTransitionTime: "2022-11-10T18:13:43Z"
message: Route was valid
observedGeneration: 14
reason: Accepted
status: "True"
type: Accepted
...
重新整理瀏覽器中的
/productpage
,您現在大約有 50% 的機率會看到紅色的星級評分。這是因為reviews
的v3
版本可以存取星級評分服務,但v1
版本則否。假設您確定
reviews:v3
微服務穩定,您可以透過套用此虛擬服務將 100% 的流量路由到reviews:v3
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-reviews-v3.yaml@
$ kubectl apply -f @samples/bookinfo/gateway-api/route-reviews-v3.yaml@
- 多次重新整理
/productpage
。現在,您將始終看到每則評論都有紅色星級評分的書籍評論。
了解發生了什麼事
在此任務中,您使用 Istio 的加權路由功能將流量從舊版本的 reviews
服務遷移到新版本。請注意,這與使用容器協調平台的部署功能進行版本遷移有很大的不同,後者使用實例擴展來管理流量。
使用 Istio,您可以允許 reviews
服務的兩個版本獨立擴展和縮減,而不會影響它們之間的流量分佈。
有關使用自動擴展進行版本路由的更多資訊,請參閱部落格文章 使用 Istio 進行 Canary 部署。
清理
- 移除應用程式路由規則
$ kubectl delete -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
$ kubectl delete httproute reviews
- 如果您不打算探索任何後續任務,請參閱 Bookinfo 清理說明以關閉應用程式。