このブログは、 SaaSサービスの構築と運用に必要だったさまざまな側面を取り上げているブログ シリーズの 2 番目です。
以前のブログでは、新しいプラットフォームを構築するに至った私たちのニーズについて背景を説明しました。 このプラットフォームを使用することで、スマート製造、公共安全のためのビデオフォレンジック、アルゴリズム取引、通信事業者の 5G ネットワークなど、複雑で多様なアプリケーション セットをお客様が構築できるようになります。
このシリーズの最初のブログでは、パブリック クラウド、プライベート ネットワーク PoP、エッジ サイトで複数のマルチテナント Kubernetes ベースのアプリケーション クラスターを提供するための分散コントロール プレーンについて説明しました。
このブログでは、アプリケーション間、ユーザー/マシン間、アプリケーションとパブリック インターネット間の 3 つの観点から、これらの分散アプリケーション クラスターを接続して保護する際の課題に取り組みます。 完全に統合された新しい L3-L7+ データパス、グローバルに分散されたコントロール プレーン、高性能なグローバル ネットワークを紹介します。 これら 3 つを組み合わせることで、エッジ、任意のクラウド VPC 内、またはグローバル ネットワーク PoP 内で包括的なネットワークおよびセキュリティ サービスが提供されます。 35 社以上の顧客を対象に 1 年以上にわたって本番環境で運用した後、展開の拡大を開始し、今が私たちの取り組みを共有する良い機会だと感じました。
当社の顧客は、スマート製造、公共安全のためのビデオフォレンジック、アルゴリズム取引、通信事業者の 5G 移行など、かなり複雑でミッションクリティカルなアプリケーションを構築しているため、アプリケーションとこれらのアプリケーションのエンドユーザーに対して、常時接続で信頼性の高いエクスペリエンスを提供する必要があります。 これらのアプリケーションの中には、クラウド内のクラスター間でデータ パイプラインを実行したり、クラウド プロバイダー間でデータをバックアップしたり、グローバル ユーザー ベースからアプリのバックエンドへのリクエストを確実に配信したり、マシンから集中型クラウドで実行されているバックエンドへの高性能な接続を必要とするものがあります。
これらのニーズを満たすために、物理ネットワークには次の 2 つの要件がありました。
R1 — クラウドからクラウドへ— 世界中のパブリック クラウドまたはプライベート クラウドのロケーション間でのアプリケーションの高パフォーマンスとオンデマンド接続
R2 — インターネットからクラウドへ— エッジロケーションのデバイスやマシンがアプリケーションバックエンドに確実に接続できるようにするには、インターネットを使用してトラフィックをバックエンドまでバックホールするのではなく、複数の冗長パスを提供し、これらのユーザーの近くで接続を終了する必要がありました。
AT&T のようなネットワーク サービス プロバイダーに依頼すれば、要件 R1 と R2 を解決することもできましたが、シームレスなネットワーク エクスペリエンスや、API ベースの構成、ストリーミング テレメトリ、自社または顧客の IP プレフィックスを簡単に追加する機能、API ベースのネットワーク サービスなど、アプリケーション サービスとの統合は提供できませんでした。 さらに、サービス プロバイダーから世界規模のサービスを受けることは非常に困難であるか、非常に高価です。 これらすべての問題を解決するために 2 つまたは 3 つのサービス プロバイダーを利用することもできましたが、その場合、動作が異なり、障害モードが異なり、SLA が異なり、サポート システムも異なり、API が異なる (または API がない) さまざまなシステムが混在することになります。
そのため、最終的には独自のネットワークを構築する必要があり、ネットワークには次の 3 つの特性が必要になりました。
これら 3 つの特性を満たすには、多くのことを行う必要がありました。 ただし、ここでは 5 つの大きなバケット項目に焦点を当てます。
私たちは開発の早い段階で、グローバル ネットワークの構築と運用には時間とスキルが必要であり、この専門知識を導入する必要があることに気付きました。 Acorus Networks (フランスのパリに拠点を置くセキュリティ プロバイダー) の創設者と数か月にわたって議論した結果、最終的に Acorus と Volterra を合併することになりました。 これにより、グローバル インフラストラクチャとネットワーク展開の問題を解決することができました。 Acorus は、優れたネットワークと運用チームを立ち上げ、Ansible を使用して物理ネットワーク構成を完全に自動化し、ソフトウェア チームが使用できるテレメトリと構成用の外部 API を構築しました。
高い信頼性とパフォーマンスを備えたグローバル プライベート ネットワークの構築に注力するチームを編成できたため、図 1 に示すように、エッジまたはクラウドの場所をまたぐアプリケーション間およびユーザー/マシンからアプリケーションへのトラフィックの両方の問題を簡単に解決できるようになりました。 さらに、ネットワーク PoP のコンピューティングおよびストレージ インフラストラクチャにより、API 終了、アプリ セキュリティ、ワークロード オフロード (エッジまたはクラウドから) をネットワークに追加することもできました。 これにより、当社は今後も長期にわたって機能を進化させ続け、需要に応じてネットワーク フットプリントとサービス カタログを簡単に拡張できるようになります。
グローバル ネットワークが機能するようになったら、アプリケーション クラスターとワークロードの追加を開始する必要がありました。 これらのワークロードには、独自のアプリケーション レベルの接続およびセキュリティ サービスのセットが必要です。
以前のブログで説明したように、このプラットフォームの目標は、複数の環境 (クラウド、エッジ、ネットワーク PoP) で実行されるワークロードを管理するチームの生産性を向上させ、複雑さを軽減することでした。
すべてのクラウド プロバイダーでは、アプリケーション クラスターへの安全な接続を確保するために、さまざまなクラウド リソースを構成、管理、監視する必要があります。 たとえば、Google Cloud では、アプリケーション クラスタのエンドツーエンドのネットワーク サービスを構成するには、さまざまなサービス セットを管理する必要があります。
素晴らしいですね。大きな課題ではありますが、各クラウド プロバイダー間で調和する構成と運用レイヤーを構築することで、この問題に取り組むことを決定できたはずです。 しかし、クラウド プロバイダーのサービスが当社のすべてのニーズを満たしているわけではなく (例: CSP にはアプリケーションと API セキュリティを実行する機能が欠けている)、最高のサービスではなく、継続的に変化しているため、これでは問題が解決されないことはわかっていました。
さらに、ネットワーク PoP とエッジ サイトについてはどうでしょうか? ハードウェア ベンダーまたはソフトウェア ベンダーから同様の機能を入手し、それらをすべて統合する必要があります (例: ルーティング + NAT + VPN の場合は Cisco/Juniper、負荷分散とファイアウォールの場合は F5 など)。 エッジロケーションでは、クラウドプロバイダーも大手ネットワークベンダーもリソースが制限された環境のネットワークサービスの問題を解決できないため、問題はさらに複雑になります。 エッジのもう 1 つの潜在的なオプションは、すべてのアプリケーション接続、セキュリティ、およびネットワーク サービスをグローバル ネットワークに移行することでしたが、同じエッジ サイト内のアプリ間トラフィックにもこれらのサービスの一部が必要であるため、この方法は機能しないことは明らかでした。
多くの議論を重ね、状況を調査した結果、多くのサービス プロバイダーとベンダー間で構成、テレメトリ、監視、アラートを統合し、それらのロードマップと API の変更に対応することは、シンプルさとスピードという当社の目標に反することがわかりました。
プラットフォーム全体で解決する必要があったもう 1 つの問題は、マルチテナントでした。これは、WAN サービスとネットワーク ルーティングの場合は簡単に実行できましたが、市場に出回っているほとんどのロード バランサーがマルチテナントをまったくサポートしていないか、非常に限定的にしかサポートしていないことを考えると、アプリケーション ネットワーキング サービスの場合は困難でした。
その結果、私たちはこの課題に取り組み、ネットワークルーティングサービスだけでなく、アプリケーション、セキュリティ、広域サービスも提供する高性能ネットワークデータパスを構築することを決定しました。 これにより、ハイブリッドおよび分散クラウド環境全体でサービス ポートフォリオを統合できるようになり、パブリック クラウド内の最小限のネイティブ サービスに依存することが必要になります。
チームには優れたネットワーク経験があり、以前 Contrail/Juniper を使用して同様の問題に対処したことがあったため、この問題を解決する最善の方法は、白紙の状態から始めて、L3 から L7+ までのサービスを単一のデータパスに統合し、当社のプラットフォームによって集中管理されながら任意のクラウドまたはエッジで実行できるまったく新しいネットワーク ソリューションを構築することだと考えました。
私たちは、この新しいデータパスの設計を開始するために、すでに 6 年間の開発期間を費やした OpenContrail vRouter (L3-L4 用) と、大規模なコミュニティの支援を受けている L7 用の Envoy という最適なプロジェクトを選択しました。 そうは言っても、新しい統合 L3-L7+ データパスを構築するには、Envoy のマルチテナント、Envoy の dpdk、ユーザー空間 dpdk TCP スタック、ネットワーク ポリシー、SSL/IPSec VPN、http 接続、動的リバース プロキシ、透過フォワード プロキシ、API ゲートウェイ、プログラム可能なアプリケーション ポリシー、DDoS 保護用の高速 ACL、PKI ID 統合、Chrome v8 エンジン、アプリケーションとネットワークのセキュリティなど、いくつかの変更と追加を行う必要がありました。
このデータパス (図 2を参照) は、アプリケーション クラスターのイングレス/エグレス ゲートウェイ、エッジのソフトウェア ゲートウェイとして展開され、クラスター内または複数のクラスター間でサービス メッシュ機能を提供したり、グローバル PoP からネットワーク サービスを提供したりするために使用されます。
プラットフォームのマルチテナントのニーズ (前回のブログで説明) に対応するために、このネットワーク データパスにも完全なマルチテナントを実現する必要がありました。 vRouter はすでにVRF をサポートしていたため、ルーティング層では比較的簡単でしたが、マルチテナントにするには Envoy に変更を加える必要がありました。 カーネル TCP スタックを使用していなかったため、Envoy の TCP ソケット インターフェイスを変更し、VRF 認識を追加しました。
このデータパスでは、API セキュリティ、アプリケーション ファイアウォール、ネットワーク セキュリティも実行する必要がありました。このために、アルゴリズム手法と機械推論を組み合わせて使用しました。このトピックについては、今後のブログ投稿で取り上げる予定です。
このネットワーク データパスを構築することで、多くの利点が得られました。
統一された構成、制御、観測性を備えた完全な L3-L7+ 機能
単一クラスタ内でのスケールアウトのサポートにより、ネットワークまたはパブリッククラウドのロケーションで、非常に小さなフットプリントと低パフォーマンスのエッジデバイスから100Gbps以上の容量までの範囲をサポートできます。
ネットワークベンダーやクラウドプロバイダーに依存せずに、ネットワークデータパスに新しい機能を迅速に追加します。
あらゆる環境で同様の障害およびパフォーマンス特性を備えた共通ソリューション。これは、当社の運用チームにとって非常に重要です。
この新しいネットワーク データパスを使用して複数のアプリ クラスターを展開できるようになったため、それらを構成、制御、監視するためのグローバルに分散されたコントロール プレーンを構築することが重要になりました。
多数の分散データパス処理ノードを管理するための分散制御プレーンの構築の一環として、当社のプラットフォーム チームが取り組む必要があった問題が複数あります。 新しいデータパスを構築したため、すぐに利用できるコントロール プレーンはなく、独自に作成する必要がありました。 単一のクラスター (クラウド、エッジ、またはネットワーク PoP) 内で実行されている複数のデータパスを管理するためのローカル コントロール プレーン。 これらのデータパス ノードには、構成の変更、ルートの更新、ヘルス チェックの実行、サービス検出の実行、BGP などのプロトコルを使用した他のネットワーク デバイスとのピアリング、メトリックとアクセス ログの集約などを管理するためのローカル コントロール プレーンが必要でした。 複数のローカル コントロール プレーンを管理する分散コントロール プレーン — グローバル ネットワーク PoP (図 3 ) では分散コントロール プレーンが実行されており、このコントロール プレーンは、ローカル コントロール プレーンの構成管理、各ローカル コントロール プレーン間の動作状態の分散、および各ノードからのデータ収集を担当します。 運用状態を分散するために、最終的に一貫性があり堅牢な BGP を使用することにしました。 私たちは OpenContrail の一部として、非常に大規模でマルチスレッドの BGP 実装を構築していたので、それを活用して、ヘルスチェックの配布、http/api エンドポイント、ポリシーの伝播など、負荷分散のための拡張機能を追加しました。
さらに、図 4に示すように、2 つのクラウド リージョン (AWS と Azure) で実行される集中管理プレーンがあり、分散制御プレーンと併用されてマルチテナントを実現します。 当社の SRE チームは複数のテナントを作成でき、各テナントはグローバル ネットワーク全体で他のテナントから完全に分離されています。 「パブリック ネットワーク」を使用してのみ相互にルーティングできます。 テナント内では、名前空間全体のサービスは、http/api/ネットワーク ルーティングとセキュリティ ルールに基づいて相互に通信できます。
コントロール プレーンは、当社の SRE チームのみが管理する別のテナントおよび分離された名前空間で Kubernetes ワークロードとして実行されます。 その結果、開発者や顧客がこのサービスを妨害することはできません。 さらに、コントロール プレーンは分散されているため、1 つの場所でコントロール プレーンが停止しても、サービス全体に影響が及ぶことはありません。
グローバル ネットワークのニーズを把握し、アプリ クラスターの L3-L7+ ネットワーク サービス (新しいデータパスと分散制御プレーン) の要件を定義すると、製品チームがさらに多くの要件を提示し、私たちの生活はさらに刺激的なものになりました。 基本的に、次の機能を備えたグローバルなクラスター間サービス メッシュを提供することが求められていました。
要件 2 と 3 では、クライアントからサーバーへの接続の応答時間とパフォーマンスを向上させることが目標であり、これはアプリケーション間の通信や大規模な SaaS アプリケーションにとって非常に重要です。 要件 2 と 3 を満たすには、分散プロキシ (図 5)、つまりネットワーク アドレスではなくアプリケーション アドレスに基づいたイングレス プロキシとエグレス プロキシおよびルートを構築するのが最善のアプローチであることは明らかでした。 さらに、分散コントロール プレーンと BGP 拡張機能 (前述のとおり) を活用して、サービス エンドポイント (またはサーバー) の健全性を分散することにしました。 分散プロキシの実装を下の図に示します。
完全な L3-L7+ ネットワーク スタックを備えた分散プロキシになったため、これをグローバル分散アプリケーション ゲートウェイと呼びます。 当社のネットワーク データパスで利用可能なすべての機能が、グローバル ネットワーク全体で利用できるようになりました。たとえば、HTTP または API に基づく負荷分散とルーティング、エッジでのポリシー適用、API 変換、ユーザーに近い場所での TLS 終了などです。
グローバルに分散されたアプリケーション ゲートウェイを実装することで、チームはさまざまなメリットを実現できました。 これらの成果は、運用の改善、セキュリティ、パフォーマンス、TCO の分野で得られました。
このブログ シリーズでは、パブリック クラウド、プライベート ネットワーク PoP、エッジ サイトにある多数のアプリケーション クラスターを使用して、グローバルに分散された SaaS サービスを構築および運用するために必要なさまざまな側面について説明します。 次はプラットフォームとデータセキュリティです…