VirtualService
https://istio.io/latest/docs/reference/config/networking/virtual-service/
https://gyazo.com/e71eb71a9f29624556a8da1d41cf295f https://qiita.com/Takagi_/items/129acd03e76fce5c295b
GPT-4.icon
🎯 VirtualServiceとは?
サービスメッシュ内のトラフィックのルーティングルール を定義するためのリソースです。
たとえば、こんなことができます:
特定の URL パスだけ別のサービスに送る
バージョンごとにトラフィックを分割(カナリアリリースやA/Bテスト)
リトライ・タイムアウト・フォールバックの制御
ヘッダーやクエリパラメータに基づくルーティング
🔧 基本構造(YAML例)
code:yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: my-service
spec:
hosts:
my-service.default.svc.cluster.local
http:
match:
uri:
prefix: /v2
route:
destination:
host: my-service
subset: v2
route:
destination:
host: my-service
subset: v1
この例では以下のように動きます:
/v2 で始まるリクエストは my-service の v2 バージョンへ
それ以外は v1 にルーティング
※ subset は DestinationRule で定義したバージョンなどのグループ名を指します。
🗺️ VirtualServiceの主要フィールド
table:table
フィールド名 説明
--------------------- ----------------------------------
hosts 対象となるサービスのホスト名(DNS形式)
gateways 外部からのアクセスを受ける Gateway を指定(省略で内部向け)
http, tcp, tls プロトコルごとのルール(httpがよく使われる)
match パス、ヘッダー、クエリなどでのマッチ条件
route 送信先のサービスやサブセット、比率(weight)など
rewrite, redirect パスの書き換えやリダイレクト制御
🧪 こんなユースケースで使える!
1. バージョン分けリリース(例:v1: 90%、v2: 10%)
2. メンテナンス中のリダイレクト
3. APIゲートウェイのようなパス振り分け
4. CookieベースやUser-Agentベースのルーティング
5. ヘッダ付きリクエストは別環境へ(例:canary)
🛠️ よくある組み合わせ
DestinationRule (istio): VirtualService の subset に対応する設定(v1, v2など)
Gateway: 外部(インターネット)からの流入を受ける場合に使う
EnvoyFilter: より細かい制御がしたいとき