すべてのプロダクト
Search
ドキュメントセンター

:トラフィックラベルに基づいてルーティングルールを定義する

最終更新日:Jan 13, 2025

TrafficLabel CustomResourceDefinition(CRD)を使用してトラフィックラベルを設定できます。 ラベルに基づいて対応するワークロードにトラフィックをルーティングするには、対応する宛先ルールと仮想サービスも作成する必要があります。 このトピックでは、トラフィックラベルに基づいてルーティングルールを定義する方法について説明します。

前提条件

トラフィックラベルが作成されています。 詳細については、「トラフィックのラベル付け」をご参照ください。

手順

  1. dr-productpage.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

    次の例では、productpage に対して test1test2test3 などの複数のサブセットを設定します。

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: dr-productpage
    spec:
      host: productpage
      subsets:
      - name: test1
        labels:
          version: test1
      - name: test2
        labels:
          version: test2
      - name: test3
        labels:
          version: test3
      ...
      - name: testn
        labels:
          version: testn
      - name: base
        labels:
          version: base
  2. 次のコマンドを実行して、宛先ルールを作成します。

    kubectl apply -f dr-productpage.yaml
  3. vs-productpage.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

    match.headersroute.destination.subset の組み合わせは、ラベルを持つトラフィックが対応する宛先ワークロードにルーティングされることを示します。 次の例では、asm-labels-test ラベル名と test1 ラベル値を持つリクエストは test1 サブセットにルーティングされ、test2 ラベル値を持つリクエストは test2 サブセットにルーティングされ、test3 ラベル値を持つリクエストは test3 サブセットにルーティングされます。

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: vs-productpage
    spec:
      hosts:
        - productpage
      http:
      - match:
        - headers:
            asm-labels-test:
             exact: test1
        route:
        - destination:
            host: productpage
            subset: test1
      - match:
        - headers:
            asm-labels-test:
             exact: test2
        route:
        - destination:
            host: productpage
            subset: test2
      - match:
        - headers:
            asm-labels-test:
             exact: test3
        route:
        - destination:
            host: productpage
            subset: test3
      - route:
        - destination:
            host: productpage
            subset: base

    パラメーター

    説明

    match.headers.asm-labels-test

    トラフィックラベルの名前。

    match.headers.exact

    トラフィックラベルの値。

    route.destination.subset

    ルートの宛先ワークロードが属するサブセット。

  4. 次のコマンドを実行して、仮想サービスを作成します。

    kubectl apply -f vs-productpage.yaml

関連操作

仮想サービスの定義を簡素化する

複数バージョンのワークロードが存在する場合、仮想サービスの構成は複雑になります。 次のコードを使用して、仮想サービスの定義を簡素化し、使用できない宛先ワークロードの他のバージョンのワークロードにトラフィックをシフトできます。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: vs-productpage
spec:
  hosts:
    - productpage
  http:
  - route:
    - destination:
        host: productpage
        subset: $asm-labels-test
                

仮想サービスの定義を拡張し、サービスバージョン間でトラフィックをシフトする

宛先サービスが使用できない場合、Enterprise Edition の Service Mesh(ASM)インスタンスでは、トラフィックをバックアップサービスにシフトできます。 route の下の fallback パラメーターは、ラベルベースのルートの宛先サービスが使用できない場合にリクエストがフォールバックするバックアップサービスを指定します。 たとえば、宛先サービスが定義されていない場合、または対応するポッドが存在しない場合です。 YAML コードの例:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: vs-productpage
spec:
  hosts:
    - productpage
  http:
  - route:
    - destination:
        host: productpage
        subset: $asm-labels-test
      fallback:
        target:
          host: productpage
          subset: base
                

パラメーター

説明

target.host

ルートの宛先サービスの名前。

target.subset

ルートの宛先サービスのサブセット。