コンテンツにスキップ

Istioを採用しない場合との比較@Istio

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. 比較表

IstioとKubernetesのみの比較

Kubernetes と Istio には重複する能力がいくつか (例:サービス検出) ある。すべての Pod の istio-proxy をインジェクションする場合、kube-proxy と Service によるサービスメッシュは不要になる。

ただし、実際の運用場面ではこれを実行することはなく、マイクロサービスの稼働する Pod のみでこれを行えばよい。

そのため、istio-proxy をインジェクションしない Pod では、Istio ではなく、従来の kube-proxy と Service によるサービス検出を使用することになる。

能力 Istio + Kubernetes + Envoy Kubernetes + Envoy Kubernetesのみ
サービスメッシュコントロールプレーン Istiodコントロールプレーン (discovery コンテナ) go-control-plane なし
サービス検出でのルーティング先設定 DestinationRule route キー kube-proxy + Service (+ CoreDNS)
サービス検出でのリスナー EnvoyFilter + EndpointSlice listener キー kube-proxy + Service (+ CoreDNS)
トラフィック管理 VirtualService + Service + DestinationRule 記入中... Service
サービス検出での追加サービス設定 ServiceEntry + EndpointSlice cluster キー EndpointSlice
Cluster外Nodeに対するサービス検出 WorkloadEntry endpoint キー Egress
サービスレジストリ etcd etcd etcd
Node外からのインバウンド通信のルーティング ・VirtualService + Gateway (内部的には、NodePort ServiceまたはLoadBalancer Serviceが作成され、これらはNode外からのインバウンド通信を待ち受けられるため、Ingressは不要である)
・Ingress + Istio Ingress Controller + ClusterIP Service
route キー + listener キー Ingress + Ingress Controller + ClusterIP Service


Istio APIからKubernetes Gateway APIへの置き換え

Istio の Gateway や VirtualService は、Kubernetes Gateway API の Gateway や HTTPRoute などに置き換えられる。

しかし、Istio の Gateway や VirtualService がもつ機能の多くに必要であり、例えば HTTPRoute は VirtualService のような Pod 間通信に非対応である。

置き換えることなく、Istio の API をそのまま使用すればよい。

Google Cloud Service Mesh では、HTTPRoute などを補うカスタムリソースとして、Mesh がある。

Istio API Kubernetes Gateway APIへの置き換え
AuthorizationPolicy そのまま使用
DestinationRule そのまま使用
EnvoyFilter そのまま使用
Gateway Kubernetes Gateway
PeerAuthentication そのまま使用
ProxyConfig そのまま使用
RequestAuthentication そのまま使用
ServiceEntry そのまま使用
Sidecar そのまま使用
Telemetry そのまま使用
VirtualService ・GRPCRoute
・HTTPRoute
・TCPRoute
・TLSRoute
・UDPRoute
WasmPlugin そのまま使用
WorkloadEntry そのまま使用
WorkloadGroup そのまま使用


01-02. Istioのメリット/デメリット

メリット


デメリット

項目 説明
Nodeのハードウェアリソースの消費量増加 IstioのPod間通信では、Kubernetesと比べて、通信に必要なコンポーネント (例:Istiodコントロールプレーン、istio-proxy) が増える。そのため、Nodeのハードウェアリソースの消費量が増え、また宛先Podからのレスポンス速度が低くなる。
学習コストの増加 Istioが多機能であり、学習コストが増加する。


02. トラフィック管理

Istio + Kubernetes + Envoy

Kubernetes と Istio 上の Pod は、Service の完全修飾ドメイン名の URL (http://foo-service.default.svc.cluster.local) を指定すると、その Service の配下にある Pod と HTTP で通信できる。

指定する URL は Kubernetes のみの場合と同じであるが、実際は Service を経由しておらず、Pod 間で直接的に通信している。

Pod 間 (フロントエンド領域とマイクロサービス領域間、マイクロサービス間) を HTTPS で通信したい場合、Istio の相互 TLS 認証を有効化する必要がある。


Kubernetesのみ

Kubernetes 上の Pod は、Service の完全修飾ドメイン名の URL (http://foo-service.default.svc.cluster.local) を指定すると、その Service の配下にある Pod と HTTP で通信できる。

Pod 間 (フロントエンド領域とマイクロサービス領域間、マイクロサービス間) を HTTPS で通信したい場合、Cert Manager などを使用して、Pod にサーバー証明書やクライアント証明書をマウントする必要がある。