トラフィックシフト
このタスクでは、マイクロサービスの1つのバージョンから別のバージョンへのトラフィックのシフト方法を示します。
一般的なユースケースとして、マイクロサービスの旧バージョンから新バージョンへのトラフィックの段階的な移行があります。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サイトを開きます。URLは
http://$GATEWAY_URL/productpage
です。ここで、$GATEWAY_URL
は、Bookinfoドキュメントで説明されているように、イングレスの外部IPアドレスです。ページのレビュー部分が、何回リフレッシュしてもレーティングスターが表示されないことに注意してください。これは、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
サービスの2つのバージョンを互いに影響を与えることなく、独立してスケールアップおよびスケールダウンできます。
自動スケーリングを使用したバージョンルーティングの詳細については、ブログ記事カナリアデプロイメントを使用したIstioをご覧ください。
クリーンアップ
- アプリケーションルーティングルールを削除します。
$ kubectl delete -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
$ kubectl delete httproute reviews
- 後続のタスクを検討する予定がない場合は、Bookinfoクリーンアップの手順を参照してアプリケーションをシャットダウンしてください。