アンビエントメッシュのご紹介

サイドカーなしでIstioを実現する新しいデータプレーンモード。

2022年9月7日 | John Howard - Google、Ethan J. Jackson - Google、Yuval Kohavi - Solo.io、Idit Levine - Solo.io、Justin Pettit - Google、Lin Sun - Solo.io

本日、私たちは「アンビエントメッシュ」とその参照実装を発表できることを嬉しく思います。これは、簡素化された運用、より広範なアプリケーションとの互換性、およびインフラストラクチャコストの削減を目的とした、新しいIstioデータプレーンモードです。アンビエントメッシュにより、ユーザーはサイドカープロキシを使用せずに、インフラストラクチャに統合されたデータプレーンを利用するオプションが提供されます。同時に、Istioの中核機能であるゼロトラストセキュリティ、テレメトリ、トラフィック管理は維持されます。今後数ヶ月で本番環境対応を目指して開発中のアンビエントメッシュのプレビューをIstioコミュニティと共有します。

Istioとサイドカー

Istioのアーキテクチャを特徴づけるものとして、設立当初からサイドカーの使用がありました。サイドカーとは、アプリケーションコンテナと共に展開されるプログラム可能なプロキシです。サイドカーにより、オペレーターはアプリケーションの大幅な変更とその関連コストを必要とせずに、Istioのメリットを享受できます。

Istio’s traditional model deploys Envoy proxies as sidecars within the workloads’ pods
Istioの従来モデルでは、Envoyプロキシがワークロードのポッド内にサイドカーとして展開されます。

サイドカーはアプリケーションのリファクタリングよりも大きな利点がありますが、アプリケーションとIstioデータプレーンとの完全な分離を実現するわけではありません。そのため、いくつかの制限があります。

サイドカーにはその役割がありますが(後述)、より侵襲性が低く、より簡単なオプションが必要であり、多くのサービスメッシュユーザーにとってより適していると考えています。

レイヤーのスライス

従来、Istioは、基本的な暗号化から高度なL7ポリシーまで、すべてのデータプレーン機能を単一のアーキテクチャコンポーネントであるサイドカーに実装していました。実際には、これはサイドカーをオールオアナッシングの提案にします。ワークロードが単純なトランスポートセキュリティのみを必要とする場合でも、管理者はサイドカーの展開とメンテナンスの運用コストを支払う必要があります。サイドカーは、ユースケースの複雑さに合わせてスケールしない、ワークロードあたりの固定運用コストを持っています。

アンビエントデータプレーンは異なるアプローチを取ります。Istioの機能を2つの異なるレイヤーに分割します。基本的には、トラフィックのルーティングとゼロトラストセキュリティを処理するセキュアオーバーレイがあります。必要に応じて、その上にL7処理を有効にして、Istioの機能の全範囲にアクセスできます。L7処理モードはセキュアオーバーレイよりも負荷が高いですが、それでもインフラストラクチャのアンビエントコンポーネントとして実行され、アプリケーションポッドの変更は必要ありません。

Layers of the ambient mesh
アンビエントメッシュのレイヤー

このレイヤー化されたアプローチにより、ユーザーはIstioをより段階的に導入し、メッシュなし、セキュアオーバーレイ、完全なL7処理に必要に応じて、名前空間ごとにスムーズに移行できます。さらに、異なるアンビエントレイヤーで実行されているワークロード、またはサイドカーを使用しているワークロードはシームレスに相互運用するため、ユーザーは時間とともに変化する特定のニーズに基づいて機能を自由に組み合わせることができます。

アンビエントメッシュの構築

Istioのアンビエントデータプレーンモードは、Kubernetesクラスターの各ノードで実行される共有エージェントを使用します。このエージェントはゼロトラストトンネル(またはztunnel)であり、その主な役割はメッシュ内の要素を安全に接続および認証することです。ノードのネットワークスタックは、参加しているワークロードのすべてのトラフィックをローカルのztunnelエージェントにリダイレクトします。これにより、Istioのデータプレーンの懸念事項とアプリケーションの懸念事項が完全に分離され、最終的にオペレーターはアプリケーションを妨げることなく、データプレーンの有効化、無効化、スケーリング、およびアップグレードが可能になります。ztunnelはワークロードトラフィックのL7処理を実行しないため、サイドカーよりもはるかに軽量です。この複雑さと関連するリソースコストの大幅な削減により、共有インフラストラクチャとして提供することが容易になります。

Ztunnelはサービスメッシュの中核機能であるゼロトラストを実現します。名前空間でアンビエントモードを有効にすると、セキュアオーバーレイが作成されます。これにより、HTTPの終了または解析を行わずに、ワークロードにmTLS、テレメトリ、認証、およびL4承認が提供されます。

Ambient mesh uses a shared, per-node ztunnel to provide a zero-trust secure overlay
アンビエントメッシュは、ノードごとに共有されるztunnelを使用して、ゼロトラストセキュアオーバーレイを提供します。

アンビエントモードが有効になり、セキュアオーバーレイが作成された後、名前空間はL7機能を使用するように構成できます。Virtual Service APIL7テレメトリ、およびL7承認ポリシーなど、Istio機能の完全なセットを実装できます。このモードで動作する名前空間は、1つ以上のEnvoyベースのウェイポイントプロキシを使用して、その名前空間のワークロードのL7処理を処理します。Istioのコントロールプレーンは、クラスター内のztunnelを構成して、L7処理を必要とするすべてのトラフィックをウェイポイントプロキシに渡します。重要な点として、Kubernetesの観点から見ると、ウェイポイントプロキシは他のKubernetesデプロイメントと同様に自動スケーリングできる通常のポッドです。これにより、ユーザーのリソース節約が大幅に期待できます。ウェイポイントプロキシは、オペレーターが期待する最大最悪ケースの負荷ではなく、サービスを提供する名前空間の実時間トラフィック需要に合わせて自動スケーリングできるためです。

When additional features are needed, ambient mesh deploys waypoint proxies, which ztunnels connect through for policy enforcement
追加の機能が必要な場合、アンビエントメッシュはウェイポイントプロキシを展開し、ztunnelはポリシーの適用のためにこれらを接続します。

アンビエントメッシュは、mTLSを介したHTTP CONNECTを使用してセキュアートンネルを実装し、パスにウェイポイントプロキシを挿入します。これはHBONE(HTTPベースのオーバーレイネットワーク環境)と呼ばれるパターンです。HBONEは、独自のTLSよりもクリーンなトラフィックのカプセル化を提供すると同時に、一般的なロードバランサーインフラストラクチャとの相互運用性を可能にします。コンプライアンスのニーズを満たすために、デフォルトでFIPSビルドが使用されます。HBONE、その標準ベースのアプローチ、およびUDPやその他の非TCPプロトコルに関する計画の詳細については、今後のブログで提供します。

単一のメッシュでサイドカーモードとアンビエントモードを混在させても、システムの機能やセキュリティ特性に制限は導入されません。Istioコントロールプレーンは、選択された展開モデルに関係なく、ポリシーが適切に適用されることを保証します。アンビエントモードは、より良い人間工学と柔軟性を備えたオプションを導入するだけです。

ローカルノードでL7処理を行わない理由

アンビエントモードは、ノード上の共有ztunnelエージェントを使用し、メッシュのゼロトラストの側面を処理します。一方、L7処理は、別途スケジュールされたポッド内のウェイポイントプロキシで行われます。なぜ間接処理を使用し、ノード上の共有フルL7プロキシを使用しないのでしょうか?これにはいくつかの理由があります。

しかし、追加のホップはどうでしょうか?

アンビエントモードでは、ウェイポイントは必ずしもサービスを提供するワークロードと同じノード上にあるとは限りません。一見するとパフォーマンス上の問題のように見えるかもしれませんが、レイテンシは最終的にIstioの現在のサイドカー実装と一致すると確信しています。専用の性能に関するブログ投稿で詳しく説明しますが、ここでは2点に要約します。

リソースオーバーヘッド

全体的に見て、Istioのアンビエントモードは、ほとんどのユーザーにとって、より少なく、より予測可能なリソース要件を持つと予想されます。ztunnelの限定的な責任により、ノード上の共有リソースとして展開できます。これにより、ほとんどのユーザーに必要なワークロードごとの予約が大幅に削減されます。さらに、ウェイポイントプロキシは通常のKubernetesポッドであるため、サービスを提供するワークロードの実時間トラフィック需要に基づいて動的に展開およびスケーリングできます。

一方、サイドカーは、各ワークロードの最悪のケースを想定してメモリとCPUを予約する必要があります。これらの計算は複雑なため、実際には管理者は過剰プロビジョニングする傾向があります。これにより、高い予約によって他のワークロードのスケジューリングが妨げられるため、ノードが過小利用されることになります。アンビエントモードのノードあたりの固定オーバーヘッドの低さと動的にスケールされるウェイポイントプロキシにより、集約されたリソース予約が大幅に削減され、クラスタの効率的な使用が可能になります。

セキュリティはどうですか?

根本的に新しいアーキテクチャには、セキュリティに関する疑問が当然生じます。アンビエントモードのセキュリティに関するブログでは詳細に説明していますが、ここでは要約します。

サイドカーは、それがサービスを提供するワークロードと共存するため、1つの脆弱性によってもう一方が侵害される可能性があります。アンビエントメッシュモデルでは、アプリケーションが侵害されたとしても、ztunnelとウェイポイントプロキシは、侵害されたアプリケーションのトラフィックに対して厳格なセキュリティポリシーを適用できます。さらに、Envoyは世界最大のネットワーク事業者によって使用されている成熟した実績のあるソフトウェアであるため、それが動作するアプリケーションよりも脆弱である可能性は低いです。

ztunnelは共有リソースですが、実行されているノード上のワークロードのキーのみにアクセスできます。したがって、そのブラスト半径は、暗号化のためにノードごとのキーに依存する他の暗号化されたCNIと同程度です。また、ztunnelのL4のみの限定的な攻撃対象領域と、前述のEnvoyのセキュリティ特性を考慮すると、このリスクは限定的で許容範囲内であると考えています。

最後に、ウェイポイントプロキシは共有リソースですが、1つのサービスアカウントのみにサービスを提供するように制限されています。これは、今日のサイドカーと同等です。ウェイポイントプロキシが1つ侵害された場合、そのウェイポイントに関連付けられた資格情報が失われ、それ以外何も影響を受けません。

これはサイドカーの終焉ですか?

決してそうではありません。アンビエントメッシュは今後多くのメッシュユーザーにとって最適な選択肢になると考えていますが、コンプライアンスやパフォーマンスチューニングなど、専用のデータプレーンリソースが必要なユーザーにとっては、サイドカーは引き続き良い選択肢です。Istioは引き続きサイドカーをサポートし、重要な点として、アンビエントモードとのシームレスな相互運用を可能にします。実際、本日リリースするアンビエントモードコードは、すでにサイドカーベースのIstioとの相互運用をサポートしています。

詳細はこちら

短いビデオを見て、ChristianがIstioアンビエントモードのコンポーネントを実行し、いくつかの機能をデモする様子をご覧ください。

参加方法

本日リリースしたのは、Istioのアンビエントモードの初期バージョンであり、現在も活発に開発中です。これをより広いコミュニティと共有し、2023年の本番環境への準備を進める中で、より多くの人々がその形成に関わってくれることを楽しみにしています。

ソリューションの形成に役立つ皆様からのフィードバックをいただければ幸いです。アンビエントモードをサポートするIstioのビルドは、ダウンロードして試すことができます。Istio Experimentalリポジトリにあります。不足している機能と作業項目のリストは、READMEで確認できます。ぜひお試しいただき、ご意見をお聞かせください!

アンビエントメッシュのローンチに貢献してくれたチームに感謝します!

この投稿を共有