Sidecar または Ambient?
Istio サービスメッシュは、論理的にデータプレーンとコントロールプレーンに分割されます。
データプレーンは、マイクロサービス間のすべてのネットワーク通信を仲介および制御するプロキシのセットです。また、メッシュトラフィックに関するテレメトリを収集して報告します。
コントロールプレーンは、データプレーン内のプロキシを管理および構成します。
Istio は、主に2つのデータプレーンモードをサポートしています。
- サイドカーモード。これは、クラスターで起動する各ポッドと一緒に、またはVM上で実行されているサービスと一緒に、Envoyプロキシをデプロイします。
- アンビエントモード。これは、ノードごとのレイヤー4プロキシと、オプションでレイヤー7機能用の名前空間ごとのEnvoyプロキシを使用します。
特定の名前空間またはワークロードを各モードに選択できます。
Sidecarモード
Istioは、2017年の最初のリリースからサイドカーパターンに基づいて構築されています。サイドカーモードはよく理解されており、徹底的に実戦テストされていますが、リソースコストと運用上のオーバーヘッドが伴います。
- デプロイする各アプリケーションには、サイドカーとしてインジェクションされたEnvoyプロキシがあります。
- すべてのプロキシは、レイヤー4とレイヤー7の両方を処理できます。
Ambientモード
2022年に開始されたアンビエントモードは、サイドカーモードのユーザーから報告された欠点に対処するために構築されました。Istio 1.22の時点で、シングルクラスターのユースケースに対応できる本番環境に対応しています。
- すべてのトラフィックは、レイヤー4のみのノードプロキシを介してプロキシされます。
- アプリケーションは、レイヤー7機能を取得するためにEnvoyプロキシを介したルーティングを選択できます。
SidecarとAmbientの選択
ユーザーは、多くの場合、最初のステップとしてゼロトラストセキュリティ体制を有効にするためにメッシュをデプロイし、必要に応じてL7機能を選択的に有効にします。アンビエントメッシュを使用すると、ユーザーは不要な場合にL7処理のコストを完全に回避できます。
Sidecar | アンビエント | |
---|---|---|
トラフィック管理 | Istioの全機能セット | Istioの全機能セット(ウェイポイントの使用が必要) |
セキュリティ | Istioの全機能セット | Istioの全機能セット:アンビエントモードでの暗号化とL4認証。L7認証にはウェイポイントが必要です。 |
可観測性 | Istioの全機能セット | Istioの全機能セット:アンビエントモードでのL4テレメトリ。ウェイポイント使用時のL7可観測性 |
拡張性 | Istioの全機能セット | Istioの全機能セット(ウェイポイントの使用が必要)α |
メッシュへのワークロードの追加 | 名前空間にラベルを付け、すべてのポッドを再起動してサイドカーを追加します | 名前空間にラベルを付ける - ポッドの再起動は不要 |
段階的なデプロイ | バイナリ:サイドカーはインジェクションされるか、されないかのどちらかです | 段階的:L4は常にオン、L7は構成によって追加可能 |
ライフサイクル管理 | アプリケーション開発者が管理するプロキシ | プラットフォーム管理者 |
リソースの利用 | 無駄が多い。個々のポッドの最悪のケースの使用量に対してCPUおよびメモリリソースをプロビジョニングする必要があります | ウェイポイントプロキシは、他のKubernetesデプロイメントのように自動スケーリングできます。 レプリカ数の多いワークロードは、それぞれが独自のサイドカーを持つのではなく、1つのウェイポイントを使用できます。 |
平均リソースコスト | 大 | 小 |
平均レイテンシ(p90/p99) | 0.63ms~0.88ms | アンビエント:0.16ms~0.20ms ウェイポイント:0.40ms~0.50ms |
L7処理ステップ | 2(送信元と宛先のサイドカー) | 1(宛先ウェイポイント) |
大規模な構成 | 構成を減らすためには、各サイドカーのスコープを構成する必要があります | カスタム構成なしで動作します |
「サーバーファースト」プロトコルをサポート | 構成が必要です | はい |
Kubernetesジョブのサポート | サイドカーの寿命が長いため複雑 | 透過的 |
セキュリティモデル | 最も強力:各ワークロードに独自のキーがある | 強力:各ノードエージェントには、そのノード上のワークロードのキーのみがある |
侵害されたアプリケーションポッド メッシュキーへのアクセスを提供します | はい | いいえ |
サポート | マルチクラスターを含む安定版 | ベータ版、シングルクラスター |
サポートされているプラットフォーム | Kubernetes(任意のCNI) 仮想マシン | Kubernetes(任意のCNI) |
レイヤー4対レイヤー7機能
レイヤー7でプロトコルを処理するためのオーバーヘッドは、レイヤー4でネットワークパケットを処理するよりも大幅に高くなります。特定のサービスの場合、要件がL4で満たされるのであれば、サービスメッシュを大幅に低いコストで提供できます。
セキュリティ
L4 | L7 | |
---|---|---|
暗号化 | ポッド間のすべてのトラフィックは、mTLSを使用して暗号化されます。 | N/A—IstioのサービスIDはTLSに基づいています。 |
サービス間認証 | SPIFFE(mTLS証明書経由)。Istioは、ポッドのサービスアカウントIDをエンコードする有効期間の短いX.509証明書を発行します。 | N/A—IstioのサービスIDはTLSに基づいています。 |
サービス間承認 | ネットワークベースの承認と、IDベースのポリシー(例)
| 完全なポリシー(例)
|
エンドユーザー認証 | N/A—ユーザーごとの設定を適用することはできません。 | JWTのローカル認証、OAuthおよびOIDCフローを介したリモート認証のサポート。 |
エンドユーザー承認 | N/A—上記を参照してください。 | サービス間ポリシーは、特定のスコープ、発行者、プリンシパル、オーディエンスなどを持つエンドユーザー資格情報を要求するように拡張できます。 外部承認を使用して、完全なユーザーからリソースへのアクセスを実装できます。これにより、外部サービス(例:OPA)からの決定を含むリクエストごとのポリシーが可能になります。 |
可観測性
L4 | L7 | |
---|---|---|
ロギング | 基本的なネットワーク情報:ネットワーク5タプル、送受信されたバイト数など。Envoyドキュメントを参照。 | 基本的なネットワーク情報に加えて、完全なリクエストメタデータロギング。 |
トレース | 現在はまだありません。最終的にはHBONEで可能です。 | Envoyは分散トレースに参加します。トレースに関するIstioの概要を参照。 |
メトリクス | TCPのみ(送受信されたバイト数、パケット数など)。 | L7 REDメトリクス:リクエストのレート、エラーのレート、リクエスト期間(レイテンシ)。 |
トラフィック管理
L4 | L7 | |
---|---|---|
ロードバランシング | 接続レベルのみ。TCPトラフィックシフトタスクを参照。 | リクエストごと。これにより、カナリアデプロイメント、gRPCトラフィックなどが可能になります。HTTPトラフィックシフトタスクを参照。 |
サーキットブレーキング | TCPのみ. | TCPに加えて、HTTP設定。 |
外れ値の検出 | 接続の確立/失敗時。 | リクエストの成功/失敗時。 |
レート制限 | 接続確立時のL4接続データのみのレート制限。グローバルおよびローカルのレート制限オプション付き。 | リクエストごとのL7リクエストメタデータのレート制限。 |
タイムアウト | 接続確立のみ(接続キープアライブはサーキットブレーキング設定で構成されます)。 | リクエストごと。 |
リトライ | 接続確立のリトライ | リクエスト失敗ごとのリトライ。 |
障害注入 | N/A—TCP接続では障害注入を構成できません。 | 完全なアプリケーションおよび接続レベルの障害(タイムアウト、遅延、特定の応答コード)。 |
トラフィックミラーリング | N/A—HTTPのみ | 複数のバックエンドへのリクエストの割合ベースのミラーリング. |
サポートされていない機能
次の機能はサイドカーモードでは使用できますが、アンビエントモードではまだ実装されていません
- サイドカーからウェイポイントへの相互運用性
- マルチクラスターインストール
- マルチネットワークサポート
- VMサポート