VirtualServiceとDestinationRuleって何が違うの
Virtual Service
- IngressGatewayにバインドすることができるし、メッシュ内の通信のみに適用する書き方もできる。
- URIのプレフィックスが
/productpage
ならrouteでproductpage.default.svc.cluster.local
へルーティングできる。 - ルーティングするトラフィックにtimeoutを付与したり、リトライ回数を付与することができる。
- Namespaceを複数作成し、リクエスト時のFQDNによって各Namespaceにトラフィックを誘導することもできる。
- この条件で流れてきたトラフィックはこっちに流す。あっちに流すをするのがVirtualServiceさん。
DestinationRule
-
host
の宛先に対してkeep-aliveをどういった設定で行わせるかを決められる。 - コネクションプールを意識した同時接続数の制限ができる。
- コネクション確立後の無通信時間(アイドル時間)を設定し、最後の通信からx秒経過したらコネクションを切断する設定ができる。
- サーキットブレーカーとしての機能があるため、x回のエラーを検知したらブレーカーが作動し以降のトラフィックに対して500系エラーを瞬時に返すことができる。
- この宛先に対してどのような制限を掛けてあげるかを設定するのがDestinationRuleさん。
実際にHTTPリクエストのタイムアウト設定やアイドルとなったコネクションを切断させるにはどうするのか
上図のVirtualServiceではコネクション確立を始める際に適用される。
そのため、HTTPリクエストを送ったがレスポンスが返ってくるまで10秒経過したらリトライが行われる。
10秒待つ→レスポンス無し→リトライを3回まで繰り返す動作となる。
DestinationRuleでは既に確立したコネクションがアイドル(無通信状態)となり
その状態で30秒が経過したらコネクションは破棄されるようになる。
おわりに
初めて真面目にお絵かきしてみましたが、こうして図として書くと全体像が掴みやすくて良いですね。
もう少し綺麗でわかりやすいデザインも知りたくなってきました。