ネットワーキング、クラウド基盤、ルーティングは、アプリの通信を支える重要な三本柱です。しかし、コントロールプレーンがなければ、これらは着信トラフィックに対応できません。データ転送の方向や原則、プロセスに関するすべてが、このネットワーク要素で決定され、その後データプレーンにより実行されます。
より明確な理解を求めるなら、本記事をお読みいただくと、実践的な詳細が分かりやすく説明されています。
このプレーンは、データパケットの流れと転送を管理するネットワークルーティングの要素です。基本的には、特定のネットワークにおける適切なトラフィックのルーティングと、アプリがリクエストに対する応答を提供することを保証します。
複数のネットワーク間で情報をどのように制御できるか理解する際の基本フレームワークとも言えます。
もっと簡単な説明をお求めなら、航空管制システムのようなものだと考えてください。飛行機が目的地に到着するための経路を決定するのと同様に、ネットワークルーティングでは、コントロールプレーンが着信トラフィックの経路を決めます。
ここまでで、データプレーンとコントロールプレーンが共にトラフィックとデータパケットの行先を決めることを理解いただけたと思います。では、次はコントロールプレーンの動作について見ていきます。
データプレーン
コントロールプレーンの一部として、パケット転送に関する命令を受け取ります。パケットをそれぞれの宛先へ転送するため、転送プレーンと呼ばれることもあります。
どちらもネットワークインフラの一部であり、データパケットの転送を担います。共存しているため混同されがちですが、実際には大きく異なります。
コントロールプレーンは判断を下す役割をもち、データプレーンはその実装を行う場所です。しかし、データパケットの作成は主にコントロールプレーンが担います。
コントロールプレーンは完全に独立した存在ですが、データプレーンは単独では存在できません。
実際、データプレーンは単独では意味をなしません。何をすべきか判断するために、コントロールプレーンが必要です。
ルーターはこれらに対して異なる役割をもち、データプレーン向けにデータパケットを転送します。
お急ぎですか?
この表で、コントロールプレーンとデータプレーンの違いを簡潔に説明しています。
コントロールプレーン | データプレーン |
---|---|
独立したコンポーネント | 依存するコンポーネント |
判断を下す | 判断を実行する |
ルーティングを担当 | スイッチングを担当 |
ルーターがデータパケットを構築 | ルーターはパケットの通過のみを許可 |
着信トラフィックの転送ルールを決定 | コントロールプレーンの指示を受け、データパケットの最終的な宛先を決定 |
サービスメッシュでは、サイドカーがコントロールプレーンへの設定を転送 | データプレーンは、サービスメッシュ内のサイドカーを用いて構築される |
多くの企業に採用されているKubernetesは、コンテナを用いる開発環境で世界的に認知されたオープンソースソフトです。このシステムにより、コンテナの迅速なスケールアップが容易になります。基本的には、統一されたワーカーマシンからなるKubernetesクラスターを特徴とします。
ワーカーマシン(ノード)はさらに、コンテナを円滑に実行するポッドを持ちます。
より複雑なシステムでは、数十のクラスターおよび数百のノードが共存します。それら全てのノードやポッドの管理は、ポッドの停止や不具合の発生を把握するのが容易でないため、大変です。
ここで、Kubernetes(またはk8s)コントロールプレーンが解決策として登場します。
従来のコントロールプレーンとは異なり、重要なクラスターの判断を担う複数の要素から構成されます。
さらに、クラスターイベントの対応や検出も担当します。Kubernetesコントロールプレーンは、etcdキーバリューストア、複数のコントローラー、APIサーバ、スケジューラーからなり、これらの要素はAPIサーバと緊密に連携します。
サービスメッシュにおいて、コントロールプレーンは別の意味を持ちます。ここでは、ポリシーの実施や設定の一部として機能します。サービスメッシュでは、複数の独立したサービスが集まり、一つのアプリを形成し、内部および外部の通信を実現します。
これらのアプリが異なる地域に存在するため、管理はより困難になります。標準化されたセキュリティ、認証、接続性、サービスディスカバリを実現するのは非常に難しいです。
プロキシの利用は、こうした複雑さを軽減する優れた方法です。サービスメッシュでは、コンテナと連携したサイドカーを利用するプロキシが用いられ、各サービスレプリカにおいて着信および発信リクエストの処理を担います。
サービスメッシュコントロールプレーンは、最新の設定情報を一元管理することで、これらの設定が正しいプロキシに届くようにしています。
サービスメッシュやKubernetesを扱う企業では、構成の展開資源としてコントロールプレーンを利用し、大規模なスケールアップを目指します。
一般に、APIが使用されない場合、コントロールプレーンは設定ファイルを作成し、ネットワーク上で共有する必要があります。この作業は1000回以上繰り返されるため、遅延を避けるためにAPIが用いられます。
プロキシサーバは、データプレーンとコントロールプレーン間の円滑で効率的な通信を実現するため、API定義プロトコルを備えています。プロキシサーバの設定に変更があった場合、必要な変更情報が関連するすべてのプロキシサーバに自動的に転送されます。
プロキシサーバが変更された設定情報を受け取ると、それを検証・採用し、実装します。提案通りに変更が適用されると、データプレーンとコントロールプレーン間の相互作用が円滑になります。
このような変更をもたらすAPIはデータプレーンAPIと呼ばれ、多くの主要なプロキシサーバで利用されています。代表的な例としては、Nginx Controller APIやEnvoy xDS APIが挙げられます。
コントロールプレーンAPIも理解すべき重要な概念です。これは、データプレーンが受け入れる設定を確認するために、コントロールプレーンが使用するAPIの一種です。データプレーンAPIとコントロールプレーンAPIは、意味が異なります。
例えば、データプレーンAPIは主に必要とされますが、コントロールプレーンAPIは必ずしも要求されません。それでも、コントロールプレーンAPIは、ソフトウェア各層間の標準的な運用フローを維持する上で重要な資源です。
これら両方のAPIはサービスメッシュの一部です。利用する前に、提供形態、つまりオープンソースとして提供されるのか、独自資産として提供されるのかを理解することが大切です。
独自のコントロールAPIを使用すると、特定ブランドの機能を利用できます。プロキシサーバの管理には、そのブランド固有のコントロールプレーンを使用する必要があります。例えば、Nginx Controller APIを利用する場合は、Nginxのコントロールプレーンを用いなければなりません。
オープンAPIの場合、特定の実装に縛られることはありません。オープンなコントロールプレーンAPIは変更が容易で、完全なカスタマイズが可能です。Envoy xDSコントロールプレーンAPIがその例です。
Traffic Directorは、バックエンドサービスや転送ルールなどの無料サービスと組み合わせやすく、あらかじめ定義された設定ファイルを持ちながらも柔軟な変更が可能です。ConsulやGCP Traffic Directorなどのコントロールプレーンは、この柔軟性を活かしています。
コントロールプレーンAPIを利用し、より良いAPIセキュリティを求める際は、コントロールプレーンAPIにもセキュリティ対策を適用してください。
長い記事でしたね。コントロールプレーンの重要性を踏まえ、重要な事実と側面を紹介しました。以下にまとめます。
参考になれば幸いです。ネットワークコンポーネントの理解が深まるほど、データ転送は円滑になります。
最新情報を購読