リクエストを区別し、異なる処理を実行するために、リクエストのヘッダーにカスタムフィールドを含めることができます。このトピックでは、ヘッダーマッチングの設定方法について説明します。
前提条件
準備が完了し、helloworld サービスと sleep サービスがデプロイされています。詳細については、「準備」をご参照ください。
手順
サービス設定が有効になっているかどうかを確認します。
kubeconfig ファイルの情報に基づいて、kubectl を使用して Container Service for Kubernetes (ACK) クラスタに接続し、次のコマンドを実行して sleep サービスの bash を有効にします。
kubectl exec -it deploy/sleep -- sh
次のコマンドを実行して、helloworld サービスにリクエストを送信します。
curl helloworld:5000/hello
期待される出力は、helloworld-v1 または helloworld-v2 がランダムにリクエストに応答することです。
Hello version: v2, instance: helloworld-v2-7d48f6b995-6**** Hello version: v1, instance: helloworld-v1-7567d85fd7-d****
istioctl ツールを使用して、次のコマンドを実行し、helloworld サービスのレイヤー 7 ウェイポイントプロキシをデプロイします。
istioctl x waypoint apply --service-account helloworld-v1 istioctl x waypoint apply --service-account helloworld-v2
次のコンテンツを使用して、宛先ルールを作成します。詳細については、「宛先ルールの管理」をご参照ください。
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
次のコンテンツを使用して、仮想サービスを作成し、ヘッダーマッチング設定を追加します。詳細については、「仮想サービスの管理」をご参照ください。
次の設定は、
test-header
リクエストヘッダーが完全に一致することを示しています。値がv1
の場合、リクエストは helloworld-v1 に送信されます。値がv2
の場合、リクエストは helloworld-v2 に送信されます。apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: helloworld-vs namespace: default spec: hosts: - helloworld http: - match: - headers: test-header: exact: v1 route: - destination: host: helloworld subset: v1 - match: - headers: test-header: exact: v2 route: - destination: host: helloworld subset: v2
ヘッダーマッチング設定が有効になっているかどうかを確認します。
kubeconfig ファイルの情報に基づいて、kubectl を使用して ACK クラスタに接続し、次のコマンドを実行して sleep サービスの bash を有効にします。
kubectl exec -it deploy/sleep -- sh
次のコマンドを実行して、ヘッダー
test-header: v1
を含むリクエストを helloworld サービスに送信します。curl -H "test-header:v1" helloworld:5000/hello
期待される出力:
Hello version: v1, instance: helloworld-v1-7567d85fd7-d****
次のコマンドを実行して、ヘッダー
test-header: v2
を含むリクエストを helloworld サービスに送信します。curl -H "test-header:v2" helloworld:5000/hello
期待される出力:
Hello version: v2, instance: helloworld-v2-7d48f6b995-6****
上記の結果は、ヘッダーマッチング設定が有効になっていることを示しています。