トラフィックシフトを設定すると、リクエストの宛先サービスに使用可能なエンドポイントがない場合、リクエストは事前に指定された別のサービスエンドポイントのセットに転送されます。このトピックでは、トラフィックシフトの設定方法について説明します。
前提条件
準備が完了し、helloworld サービスと sleep サービスがデプロイされています。詳細については、「準備」をご参照ください。
手順
次のコンテンツを使用して、宛先ルールを設定します。詳細については、「宛先ルールの管理」をご参照ください。
apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: helloworld namespace: default spec: host: helloworld subsets: - labels: version: v1 name: v1 - labels: version: v2 name: v2
次のコンテンツを使用して、次の仮想サービスを作成します。helloworld サービス宛てのすべてのリクエストは、helloworld サービスの v1 サブセットに送信されます。 v1 サブセットに使用可能なエンドポイントがない場合、リクエストは helloworld サービスの v2 サブセットにシフトされます。詳細については、「仮想サービスの管理」をご参照ください。
トラフィックシフト設定が有効になっているかどうかを確認します。
kubeconfig ファイルの情報に基づいて、kubectl を使用して Container Service for Kubernetes ( ACK )クラスターに接続し、次のコマンドを実行します。
kubectl exec deploy/sleep -- sh -c "for i in \$(seq 1 100); do curl -s http://helloworld:5000/hello; done"
予期される出力:
Hello version: v1, instance: helloworld-v1-9585666c8-8**** Hello version: v1, instance: helloworld-v1-9585666c8-8**** Hello version: v1, instance: helloworld-v1-9585666c8-8**** Hello version: v1, instance: helloworld-v1-9585666c8-8**** ... Hello version: v1, instance: helloworld-v1-9585666c8-8****
出力は、helloworld サービスの v1 サブセットに使用可能なエンドポイントがある場合、すべてのリクエストが helloworld サービスの v1 サブセットに送信されることを示しています。
障害をシミュレートするために、helloworld サービスの v1 サブセットの Pod 数を 0 にスケールインします。
ACK コンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のペインで、 を選択します。
[デプロイメント] ページで、helloworld-v1 のワークロードを見つけ、[アクション] 列の [スケール] をクリックします。 [スケール] ダイアログボックスで、[必要な Pod 数] を [0] に設定し、[OK] をクリックします。
kubeconfig ファイルの情報に基づいて、kubectl を使用して ACK クラスターに接続し、次のコマンドを実行して helloworld サービスへのアクセスを確認します。
kubectl exec deploy/sleep -- sh -c "for i in \$(seq 1 100); do curl -s http://helloworld:5000/hello; done"
予期される出力:
Hello version: v2, instance: helloworld-v2-68bb8c995b-t**** Hello version: v2, instance: helloworld-v2-68bb8c995b-t**** ... Hello version: v2, instance: helloworld-v2-68bb8c995b-t**** Hello version: v2, instance: helloworld-v2-68bb8c995b-t**** Hello version: v2, instance: helloworld-v2-68bb8c995b-t****
出力は、helloworld サービスの v1 サブセットに使用可能なエンドポイントがない場合、すべてのリクエストが helloworld サービスの v2 サブセットに送信されることを示しています。これは、トラフィックシフト設定が有効になっていることを示しています。
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: helloworld
spec:
hosts:
- helloworld
http:
- route:
- destination:
host: helloworld
subset: v1
fallback:
target:
host: helloworld
subset: v2