Kubernetes CNIネットワークの最強の比較:Flannel、Calico、Canal、Weave



Strongest Comparison Kubernetes Cni Networks



640?wx_fmt = png

この記事では、最も人気のあるCNIプラグイン(Flannel、Calico、Weave、Canal)の調査と比較に焦点を当て、技術原則と対応する用語の紹介、それらの原則、使用方法、適用可能なシナリオ、長所と短所の比較と紹介を行います。などはじめに

640?wx_fmt = png




ネットワークアーキテクチャは、多くのユーザーを悩ませているKubernetesのより複雑な側面の1つです。 Kubernetesネットワークモデル自体には、特定のネットワーク機能に対する特定の要件がありますが、実装には特定の柔軟性もあります。したがって、業界には特定の環境と要件を満たすためのさまざまなネットワークソリューションがあります。
CNIは、コンテナが作成または破棄されたときにユーザーがコンテナネットワークをより簡単に構成できるようにするための、標準設計であるコンテナネットワークインターフェイスを意味します。この記事では、最も人気のあるCNIプラグインであるFlannel、Calico、Weave、Canal(技術的には複数のプラグインの組み合わせ)の調査と比較に焦点を当てます。これらのプラグインは、Kubernetesネットワーク要件が満たされていることを確認できるだけでなく、Kubernetesクラスター管理者に必要な特定のネットワーク機能を提供します。




バックグラウンド

640?wx_fmt = png


コンテナネットワークは、コンテナが他のコンテナ、ホスト、および外部ネットワーク(インターネットなど)への接続を選択するメカニズムです。コンテナのランタイムはさまざまなネットワークモードを提供し、それぞれが異なるエクスペリエンスを生成します。たとえば、Dockerはデフォルトでコンテナ用に次のネットワークを構成できます。
  • none:コンテナは、外部接続なしでコンテナの専用ネットワークスタックに追加されます。



  • ホスト:コンテナをホストのネットワークスタックに分離せずに追加します。

  • デフォルトブリッジ:デフォルトのネットワークモード。各コンテナは、IPアドレスで相互に接続できます。

  • カスタムブリッジ:柔軟性、分離、その他の便利な機能を備えたユーザー定義のブリッジ。


Dockerを使用すると、ユーザーは他のドライバーやプラグインを介して、より高度なネットワーク(マルチホストオーバーレイネットワークを含む)を構成することもできます。
CNIの本来の目的は、コンテナーを構成または破棄するときに、適切なネットワーク構成とリソースを動的に構成するためのフレームワークを作成することでした。以下のリンクのCNI仕様は、ネットワークを構成するためのプラグインインターフェイスをまとめたものです。これにより、コンテナーランタイムがプラグインと調整できるようになります。https://github.com/containernetworking/cni/blob/master/SPEC.md 。
プラグインは、インターフェイスのIPアドレスの構成と管理を担当し、通常、IP管理、各コンテナーへのIP割り当て、およびマルチホスト接続に関連する機能を提供します。コンテナの実行中は、ネットワークプラグインが呼び出され、コンテナの起動時にIPアドレスが割り当てられてネットワークが構成され、コンテナが削除されたときに再度呼び出されてこれらのリソースがクリーンアップされます。
ランタイムまたはコーディネーターは、コンテナーが参加するネットワークと、コンテナーが呼び出す必要のあるプラグインを決定します。次に、プラグインは、vethペアの側としてコンテナネットワーク名前空間にインターフェイスを追加します。次に、vethの他の部分をブリッジに接続するなど、ホストに変更を加えます。その後、別のIPAM(IPアドレス管理)プラグインを呼び出して、IPアドレスを割り当て、ルーティングを設定します。
Kubernetesでは、kubeletは適切なタイミングで検出したプラグインを呼び出して、kubeletによって起動されたポッドの自動ネットワーク構成を実行できます。


用語

640?wx_fmt = png


(注:Kubernetesを深く迅速に学習したい場合は、 私たちが主催する3日間のKubernetes実践トレーニングにサインアップできます 、一次上級講師が0からKubernetesの使用を開始します。)
CNIプラグインを比較する前に、まずネットワークに表示される関連用語を全体的に理解することができます。この記事を読んだり、将来他のCNI関連のコンテンツに触れたりする場合でも、いくつかの一般的な用語を理解しておくと常に役立ちます。
最も一般的な用語のいくつかは次のとおりです。
  • レイヤー2ネットワーク:OSI(Open Systems Interconnections)ネットワークモデルの「データリンク」レイヤー。レイヤー2ネットワークは、ネットワーク上の2つの隣接するノード間のフレーム転送を処理します。レイヤー2ネットワークの注目すべき例はイーサネットで、MACはサブレイヤーとして表されます。

  • レイヤー3ネットワーク:OSIネットワークモデルの「ネットワーク」レイヤー。レイヤー3ネットワーキングの主な焦点は、レイヤー2接続の上のホスト間でパケットをルーティングすることです。 IPv4、IPv6、およびICMPは、レイヤー3ネットワークプロトコルの例です。

  • VXLAN:「VirtualExtensibleLAN」の略です。まず、VXLANは、UDPデータグラムにレイヤー2イーサネットフレームをカプセル化することにより、大規模なクラウド展開の実現を支援するために使用されます。 VXLAN仮想化はVLANに似ていますが、柔軟性と機能性が向上しています(VLANは4096のネットワークIDに制限されています)。 VXLANは、既存のネットワークで実行できるカプセル化およびオーバーレイプロトコルです。

  • オーバーレイネットワーク:オーバーレイネットワークは、既存のネットワークの上に構築された仮想論理ネットワークです。オーバーレイネットワークは通常、既存のネットワークの上に有用な抽象化を提供し、さまざまな論理ネットワークを分離して保護するために使用されます。

  • カプセル化:カプセル化とは、ネットワークデータパケットを追加のレイヤーにカプセル化して、他のコンテキストや情報を提供するプロセスを指します。オーバーレイネットワークでは、カプセル化を使用して仮想ネットワークから基になるアドレススペースに変換し、別の場所にルーティングできるようにします(パケットのカプセル化を解除して、宛先に続行できます)。

  • メッシュネットワーク:メッシュネットワークとは、各ノードが他の多くのノードに接続されてルーティングを調整し、より大きな接続を実現するネットワークを指します。メッシュネットワークでは、複数のパスを介したルーティングが可能であるため、より信頼性の高いネットワークが提供されます。メッシュグリッドの欠点は、ノードを追加するたびに多くのオーバーヘッドが追加されることです。

  • BGP:「ボーダーゲートウェイプロトコル」の略で、エッジルーター間のデータパケットのルーティングを管理するために使用されます。 BGPは、使用可能なパス、ルーティングルール、および特定のネットワークポリシーを検討することにより、あるネットワークから別のネットワークにパケットを送信する方法を理解するのに役立ちます。 BGPは、カプセル化されたオーバーレイネットワークの代わりに、CNIプラグインのルーティングメカニズムとして使用されることがあります。


さまざまなプラグインをサポートする技術用語とさまざまなテクノロジーを理解した後、最も人気のあるCNIプラグインのいくつかを探索し始めることができます。


CNIの比較

640?wx_fmt = png


フランネル
リンク:https://github.com/coreos/flannel
CoreOSによって開発されたプロジェクトであるFlannelは、おそらく最も直接的で人気のあるCNIプラグインです。これは、コンテナーオーケストレーションシステムで最も成熟したネットワーク構造の例の1つであり、コンテナー間およびホスト間のネットワークを改善することを目的としています。 CNIの概念の台頭により、FlannelCNIプラグインは初期のエントリです。
他のソリューションと比較して、Flannelはインストールと構成が比較的簡単です。これは、単一のバイナリファイルFlannelDとしてパッケージ化されており、多くの一般的なKubernetesクラスターデプロイメントツールと多くのKubernetesディストリビューションがデフォルトでFlannelをインストールできます。 Flannelは、Kubernetesクラスターの既存のetcdクラスターを使用して、APIを使用して状態情報を保存できるため、専用のデータストレージは必要ありません。
Flannelは、レイヤー3IPv4オーバーレイネットワークを構成します。クラスタ内のすべてのノードにまたがる大規模な内部ネットワークを作成します。このオーバーレイネットワークでは、各ノードに、IPアドレスを内部的に割り当てるために使用されるサブネットがあります。ポッドを構成するとき、各ノードのDockerブリッジインターフェイスは、新しい各コンテナーにアドレスを割り当てます。同じホスト上のポッドはDockerブリッジを使用して通信できますが、異なるホスト上のポッドはflanneldを使用してトラフィックをUDPパケットにカプセル化し、適切な宛先にルーティングできるようにします。
Flannelには、カプセル化とルーティングに使用できるいくつかの異なるタイプのバックエンドがあります。デフォルトで推奨される方法は、VXLANを使用することです。これは、VXLANのパフォーマンスが向上し、手動による介入が少なくて済むためです。
一般的に、フランネルはほとんどのユーザーにとって良い選択です。管理の観点から、それは単純なネットワークモデルを提供します。ユーザーは、ほとんどのユースケースに適した環境をセットアップするために、いくつかの基本的な知識を必要とするだけです。一般的に言って、フランネルが提供できないものが必要になるまで、最初にフランネルを使用することは安全で安全なオプションです。
キャラコ
リンク:https://github.com/projectcalico/cni-plugin
Calicoは、Kubernetesエコシステムで人気のあるもう1つのネットワーキングオプションです。フランネルは最も簡単なオプションとして認識されていますが、Calicoはそのパフォーマンスと柔軟性で知られています。 Calicoの機能はより包括的であり、ホストとポッド間のネットワーク接続を提供するだけでなく、ネットワークのセキュリティと管理も提供します。 Calico CNIプラグインは、CNIフレームワーク内にCalicoの機能をカプセル化します。
システム要件を満たす新しく構成されたKubernetesクラスターでは、ユーザーは単一のマニフェストファイルを適用することでCalicoをすばやくデプロイできます。 Calicoのオプションのネットワークポリシー機能に関心がある場合は、他のマニフェストをクラスターに適用して、これらの機能を有効にすることができます。
Calicoの展開に必要な操作は非常に単純に見えますが、Calicoが作成するネットワーク環境には、単純な属性と複雑な属性の両方があります。 Flannelとは異なり、Calicoはオーバーレイネットワークを使用しません。対照的に、Calicoは、BGPルーティングプロトコルを使用してホスト間でパケットをルーティングするレイヤー3ネットワークを構成します。これは、ホスト間を移動するときに、データパケットを追加のカプセル化レイヤーでラップする必要がないことを意味します。 BGPルーティングメカニズムは、トラフィック層にトラフィックをパッケージ化する必要なしに、データパケットをローカルに転送できます。
パフォーマンス上の利点に加えて、ユーザーは従来の方法を使用して、ネットワークの問題が発生したときにトラブルシューティングを行うこともできます。 VXLANなどのテクノロジーを使用したカプセル化も優れたソリューションですが、プロセスがデータパケットを処理する方法を同じフィールドで追跡することは困難です。 Calicoを使用すると、標準のデバッグツールで単純な環境と同じ情報にアクセスできるため、より多くの開発者や管理者が動作を理解しやすくなります。
ネットワーク接続に加えて、Calicoはその高度なネットワーク機能でも知られています。ネットワーク戦略は、最も求められている機能の1つです。さらに、CalicoをサービスメッシュIstioと統合して、サービスメッシュレイヤーとネットワークインフラストラクチャレイヤーのクラスター内のワークロードの戦略を説明および実装することもできます。これは、ユーザーがポッドがトラフィックを送受信する方法を説明する強力なルールを構成し、セキュリティを向上させ、ネットワーク環境を制御できることを意味します。
ネットワーク戦略のサポートが環境にとって非常に重要であり、他のパフォーマンスや機能の要件もある場合は、Calicoが理想的な選択肢になります。さらに、現在または将来、技術サポートを受けたい場合は、Calicoが商用サポートを提供します。一般的に言って、Calicoは、一度設定して忘れるのではなく、ネットワークを長期間制御できるようにしたい場合に適しています。
チャネル
リンク:https://github.com/projectcalico/canal
運河も多くの理由で興味深い選択です。
まず、Canalは、Flannelが提供するネットワーク層をCalicoのネットワーク戦略機能と統合しようとするプロジェクトの名前です。しかし、寄稿者が詳細な作業を完了したとき、フランネルとキャリコの2つのプロジェクトの標準化と柔軟性が別々に確保されていれば、統合はそれほど必要ないことは明らかでした。その結果、この公式プロジェクトは少し「未完成」になりましたが、2つのテクノロジーを一緒に展開するという期待された能力を達成しました。このため、このプロジェクトが存在しなくなったとしても、業界ではフランネルとキャリコの構成を習慣的に「運河」と呼んでいます。
CanalはFlannelとCalicoを組み合わせたものであるため、その利点はこれら2つのテクノロジーの交差点にあります。ネットワーク層は、Flannelが提供する単純なオーバーレイを使用します。これは、追加の構成なしで、さまざまな展開環境で実行できます。ネットワーク戦略に関して、Calicoの強力なネットワークルール評価は、基本的なネットワークにさらに多くの補足を提供し、それによってより多くのセキュリティと制御を提供します。
クラスターが必要なシステム要件を満たしていることを確認した後、ユーザーは2つのマニフェストを適用してCanalをデプロイする必要があります。これにより、単一のプロジェクトよりも構成が難しくなります。会社のITチームがネットワークソリューションの変更を計画していて、変更を実装する前にネットワーク戦略を試し、経験を積むことを望んでいる場合は、Canalが適しています。
一般的に言って、Flannelが提供するネットワークモデルが好きで、Calicoのいくつかの機能が非常に魅力的であることがわかった場合は、Canalを試してみることをお勧めします。セキュリティの観点から、ネットワークポリシールールを定義する機能は大きな利点であり、多くの点でCalicoのキラー機能です。このテクノロジーを使い慣れたネットワーク層に適用できるということは、より強力な環境を手に入れ、移行プロセスのほとんどを節約できることを意味します。
織り
リンク:https://www.weave.works/oss/net/
Weaveは、Weaveworksが提供するKubernetesCNIネットワークオプションです。それが提供するモードは、これまでに説明したすべてのネットワークソリューションとは異なります。 Weaveは、クラスター内の各ノード間にメッシュオーバーレイネットワークを作成し、参加者間の柔軟なルーティングを可能にします。この機能を他のいくつかの独自の機能と組み合わせると、問題を引き起こす可能性のある特定の状況でWeaveをインテリジェントにルーティングできます。
ネットワークを作成するために、Weaveはネットワーク内の各ホストにインストールされているルーティングコンポーネントに依存しています。次に、これらのルーターはトポロジ情報を交換して、利用可能なネットワーク環境の最新のビューを維持します。トラフィックを異なるノードにあるポッドに送信する必要がある場合、Weaveルーティングコンポーネントは、トラフィックを「高速データパス」経由で送信するか、「スリーブ」パケット転送方法にフォールバックするかを自動的に決定します。
高速データパスは、カーネルのネイティブOpen vSwitchデータパスモジュールに依存して、ユーザースペースに何度も出入りすることなく、データパケットを適切なポッドに転送します。ウィーブルーターはOpenvSwitch構成を更新して、カーネル層が着信パケットのルーティング方法に関する正確な情報を確実に取得できるようにします。逆に、ネットワークトポロジが高速データパスルーティングに適していない場合は、スリープモードをバックアップとして使用できます。これは、より遅いカプセル化モードです。高速データパスに必要なルーティング情報または接続がない場合に、データパケットをルーティングできます。トラフィックがルーターを通過するときに、どのピアがどのMACアドレスに関連付けられているかを学習し、後続のトラフィックをより少ないホップでよりインテリジェントにルーティングできるようにします。ネットワークの変更により利用可能なルートが変更された場合、この同じメカニズムが各ノードの修正に役立ちます。
Calicoと同様に、WeaveはKubernetesクラスターのネットワークポリシー機能も提供します。 Weaveを設定すると、ネットワークポリシーが自動的にインストールおよび構成されるため、ユーザーはネットワークルールを追加する以外に構成する必要はありません。他のネットワークソリューションでは利用できないWeave独自の機能は、ネットワーク全体の単純な暗号化です。これによりネットワークのオーバーヘッドが大幅に増加しますが、WeaveはNaCl暗号化を使用して、ルーティングされたすべてのトラフィックをスリープトラフィック用に自動的に暗号化できます。高速データパストラフィックの場合、カーネル内のVXLANトラフィックを暗号化する必要があるため、WeaveはIPsecESPを使用して高速データパストラフィックを暗号化します。
Weaveは、機能が豊富なネットワークを探していて、複雑さや管理の難しさをあまり増やさないようにしたい人に適しています。セットアップは比較的簡単で、多くの組み込みおよび自動構成機能を提供し、他のソリューションが失敗する可能性があるシナリオでインテリジェントなルーティングを提供できます。メッシュトポロジは、合理的に対応できるネットワークのサイズを制限しますが、ほとんどのユーザーにとって、これは大きな問題ではありません。さらに、Weaveは有料の技術サポートも提供し、エンタープライズユーザー向けのトラブルシューティングなどの技術サービスを提供できます。
結論

640?wx_fmt = png


Kubernetesで採用されているCNI標準により、Kubernetesエコシステムでさまざまなネットワークソリューションが可能になります。より多様な選択肢があるということは、ほとんどのユーザーが現在のニーズと展開環境に適したCNIプラグインを見つけることができ、環境が変化したときに新しいソリューションを見つけることもできることを意味します。
さまざまな企業の運用要件は大きく異なるため、さまざまなレベルの複雑さと豊富な機能を備えた一連の成熟したソリューションを持つことで、Kubernetesは、さまざまなユーザーの固有のニーズを満たしながら、一貫したユーザーエクスペリエンスを提供できます。 。
この記事は公開アカウントから複製されています:RancherLabs、 クリックして元のテキストを表示


Kubernetesのエントリと高度な実践トレーニング

640?


Kubernetesの入門および高度な実践トレーニングは、2019年6月14日に北京で開始されます。3日でKubernetesを習得できます。 学習効果が良くない場合は、学習を続けることができます。 このトレーニングには、Dockerの基本、コンテナテクノロジー、Dockerミラーリング、データ共有と永続性、Docker troika、Dockerプラクティス、Kubernetesの基本、ポッドの基本と高度な共通オブジェクト操作、サービスディスカバリ、Helm、Kubernetesコアコンポーネントの原則分析、Kubernetesサービス品質が含まれます。保証、詳細なスケジューリングとアプリケーションシナリオ、ネットワーク、KubernetesベースのCI / CD、Kubernetesベースの構成管理など、詳細については、下の画像をクリックするか、クリックして元のテキストをお読みください。
640?wx_fmt = jpeg