VirtualService
概要
VirtualService は Istio のサービスメッシュ内におけるサービスを表す.
VirtualService を試用することでサービスメッシュ内にてあるドメインへのリクエストに対するルーティングを定義することができる.ルーティングではリクエストのスキームやパス,メソッド,HTTP ヘッダーなどに基づいて,サービスメッシュ内の宛先Destination に振り分けることができる. VirtualService の例
下記に VirtualService の定義例を掲載する.出典は公式ドキュメントである. code:yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews-route
spec:
hosts:
- reviews.prod.svc.cluster.local
http:
- name: "reviews-v2-routes"
match:
- uri:
prefix: "/wpcatalog"
- uri:
prefix: "/consumercatalog"
rewrite:
uri: "/newcatalog"
route:
- destination:
host: reviews.prod.svc.cluster.local
subset: v2
- name: "reviews-v1-route"
route:
- destination:
host: reviews.prod.svc.cluster.local
subset: v1
この構成では reviews.prod.svc.cluster.local というメッシュ内ドメインを持ったサービスを対象としている.hosts フィールにてこのドメインへのトラフィックをここにおける VirtualService のルーティングの対象であると宣言している.
http フィールドの各要素でルーティング規則を定義している. match でルーティング規則を適用する条件を, rewrite で URL の書き換え規則を, route フィールドでルーティング先を (複数) 指定している.
destination フィールドは Kubernetes の Service 名,または Istio の Destination を参照する.Destination を参照する場合は subset という宛先サービスの Pod の中でもバージョンなどで分けた部分集合を指定することもできる. VirtualService を定義しない場合の挙動
VirtualService を定義しない場合,Kubernetes の Service が暗黙的に VirtualService として使用される.つまり, myservice.mynamespace.svc.cluster.local を host とする VirtualService が存在しないとき,サービスメッシュ内のそのドメインに向けた全トラフィックは mynamespace Namespace 内の myservice Service へと向けられる. 参考