TrafficLabel CustomResourceDefinition(CRD)を使用してトラフィックラベルを設定できます。 ラベルに基づいて対応するワークロードにトラフィックをルーティングするには、対応する宛先ルールと仮想サービスも作成する必要があります。 このトピックでは、トラフィックラベルに基づいてルーティングルールを定義する方法について説明します。
前提条件
トラフィックラベルが作成されています。 詳細については、「トラフィックのラベル付け」をご参照ください。
手順
dr-productpage.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
次の例では、
productpage
に対してtest1
、test2
、test3
などの複数のサブセットを設定します。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
次のコマンドを実行して、宛先ルールを作成します。
kubectl apply -f dr-productpage.yaml
vs-productpage.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
match.headers
とroute.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
ルートの宛先ワークロードが属するサブセット。
次のコマンドを実行して、仮想サービスを作成します。
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 | ルートの宛先サービスのサブセット。 |