Kubernetes ネットワークを説明する 16 個の本格的な図

概要

この記事では、Kubernetes のネットワーク モデルについて説明し、さまざまなネットワーク モデルを分析します。

アンダーレイネットワークモデル

アンダーレイネットワークとは

名前が示すように、基盤となるネットワークは 、スイッチ、ルーター、および ネットワーク メディアを使用してそれらをリンクする物理ネットワーク トポロジなどのネットワーク機器インフラストラクチャをUnderlay Network 指し 、ネットワーク間のデータ パケットの送信を担当します。DWDM

アンダーレイネットワークトポロジ

underlay network これはレイヤ 2 またはレイヤ 3 であり、レイヤ 2 の典型的な例はイーサネット Ethernet、レイヤ 3 の典型的な例はインターネットです Internet

第 2 層で動作する技術は、 vlan第 3 層で動作する技術が などのプロトコルで構成されているということ OSPFです BGP 。

k8s のアンダーレイ ネットワーク

kubernetesではunderlay network ホストマシンをルータ装置として利用することが代表例であり、Podネットワークはルーティングエントリを学習することでクロスノード通信を実現します。

Kubernetes のアンダーレイ ネットワーク トポロジ

 このモデルの下には典型的な パターンと パターンflannel があります  。host-gwcalico BGP

フランネルホスト-GW

flannel host-gw このモードでは、各ノードは同じレイヤ 2 ネットワーク内に存在する必要があり、ノードはルーターとして使用され、ノード間の通信はルーティング テーブルを通じて実行され、ネットワークが 1 つとしてシミュレートされます。underlay network

レイヤ 2 イーサネット トポロジ

注: ルーティングを経由するため、クラスターの CDR は少なくとも 16 に設定する必要があります。これにより、ノード間のノードがネットワークのレイヤーとして使用され、同じノード上のポッドがネットワークとして使用されることが保証されます。そうでない場合、ルーティング テーブルは同じネットワーク内にあり、ネットワークに到達できなくなります。

キャリコBGP

BGP ( Border Gateway Protocol) は、分散型自律ルーティング プロトコルです。これは、前缀IP ルーティング テーブルを維持することによって AS ()Autonomous System間のアクセスを実現し、ベクトル ルーティング プロトコルに属します。

BGP ネットワーク トポロジ

違い flannel は、Calico 提供される BGP ネットワーク ソリューションはネットワーク モデルと似てCalico います Flannel host-gw が、ソフトウェア アーキテクチャの実現において、 プロセスは  ルーティング情報を維持するため  に flannel 使用され 、複数のデーモン プロセスが含まれていることです 。ルート リフレクター ( ) の場合、 クライアントは  そこから 、リフレクターは BGP で最適化された役割を果たします。同じ IBGP では、BGP クライアントは  1 つに接続するだけでよいため、内部で維持される多数の BGP 接続が削減されます。通常、 クライアント として 機能する のは実際のルーティング デバイスです 。flanneldCalicoBridBGPRouter ReflectorBGPFelixBGP PeerRRASRRBirdBGP

Calico ネットワーク アーキテクチャ

IPVLAN と MACVLAN

IPVLAN これ MACVLAN はネットワーク カード仮想化テクノロジであり、この 2 つの違いは、 IPVLAN 物理ネットワーク カードが複数の IP アドレスを持つことができることと、すべての仮想インターフェイスが同じ MAC アドレスを使用すること、逆に、 MACVLAN 同じネットワーク カードが複数の IP アドレスを持つことができることです。複数の IP アドレス、複数の MAC アドレス、および仮想ネットワーク カードには IP アドレスがない場合があります。

本質的にはネットワーク仮想化技術ではなくネットワークカード仮想化技術であるため、 Overlay network仮想化環境におけるこの方式 Overlay network の最大の特徴は、PodネットワークをNodeネットワークと同レベルに平準化し、より高いパフォーマンスを提供できることです。 、低遅延ネットワークインターフェイス。基本的に、そのネットワーク モデルは、次の図の 2 番目のネットワーク モデルに属します。

仮想ネットワーキング モード: ブリッジング、多重化、SR-IOV

  • 仮想ブリッジ: 仮想ネットワーク カード ペア (veth ペア) を作成し、一方の端をコンテナ内に、もう一方の端をホスト マシンのルート名前空間に作成します。このようにして、コンテナから送信されたデータ パケットはブリッジを介してホスト ネットワーク スタックに直接入力でき、コンテナに送信されたデータ パケットもブリッジを介してコンテナに入力できます。

  • 多重化: 中間ネットワーク デバイスを使用して複数の仮想 NIC インターフェイスを公開します。コンテナ NIC はこの中間デバイスに介入し、MAC/IP アドレスを使用してパケットがどのコンテナ デバイスに送信されるかを区別します。

  • ハードウェアの切り替えにより、各 Pod に仮想ネットワーク カードが割り当てられ、物理マシン間の通信基盤に近いため、Pod 間の接続関係が非常に明確になります。現在、ほとんどのネットワーク カードは、単一の物理ネットワーク カードを複数の VF インターフェイスに仮想化する SR-IOV 機能をサポートしています。各 VF インターフェイスには個別の仮想 PCIe チャネルがあり、これらの仮想 PCIe チャネルは物理ネットワーク カードの PCIe チャネルを共有します。

kubernetes の IPVLAN このネットワーク モデルにおける典型的な CNI には、 multus と danm が含まれます。

多くの

multuscni これはインテルのオープンソース CNI ソリューションであり、従来  型であり multus、K8 ポッドが SR-IOV VF に接続できるようにする SR-IOV CNI プラグインを提供します。IPVLAN/MACVLAN これが使われている関数です 。

新しいポッドが作成されると、SR-IOV プラグインが動作を開始します。構成 VF は新しい CNI 名前空間に移動されます。プラグインは、CNI 設定ファイルの「name」オプションに従ってインターフェイス名を設定します。最後に、VF ステータスを UP に設定します。

以下の図は、Multus と SR-IOV CNI プラグイン、3 つのインターフェイスを持つポッドのネットワーク環境です。

  • eth0flannel ネットワーク プラグイン であり 、ポッドのデフォルト ネットワークとしても機能します

  • VF は、ホストの物理ポート ens2f0 のインスタンス化です。これは Intel X710-DA4 のポートです。Pod側のVFインターフェース名は です south0 。

  • この VF は DPDK ドライバーを使用し、VF は ens2f1 ホスト上の物理ポートからインスタンス化されます。これは、Intel® X710-DA4 の別のポートです。ポッド内の VF インターフェースの名前は です north0このインターフェイスは DPDK ドライバーにバインドされています vfio-pci 。

Mutus ネットワーキング アーキテクチャ オーバーレイと SR-IOV

注: 用語

  • NIC: ネットワークインターフェースカード、ネットワークカード

  • SR-IOV: シングル ルート I/O 仮想化。仮想マシンが PCIe デバイスを共有できるようにするハードウェア実装機能です。

  • VF: PF に基づく仮想機能は、物理リソースを PF または他の VF と共有します。

  • PF: PCIe 物理機能。PCIe リソースを完全に制御する機能があります。

  • DPDK:データプレーン開発キット

同時に、ホスト インターフェイスをポッドのネットワーク名前空間に直接移動することもできます。もちろん、このインターフェイスは存在する必要があり、デフォルト ネットワークと同じインターフェイスを使用することはできません。この場合、一般的なネットワークカードの環境では、Pod ネットワークと Node ネットワークが同一平面上に直接配置されます。

Mutus ネットワーキング アーキテクチャ オーバーレイと ipvlan

くそ

DANM は Nokia のオープンソース CNI プロジェクトであり、multus と同様にキャリアクラスのネットワークを kubernetes に導入することを目的としており、SR-IOV/DPDK ハードウェア テクノロジも提供し、IPVLAN をサポートします。

オーバーレイネットワークモデル

オーバーレイとは

オーバーレイネットワークとは、物理的なネットワークアーキテクチャを変更せずに、ネットワーク仮想化技術を用いて underlay ネットワーク上に構築される仮想的な論理ネットワークです。基本的に、overlay network 1 つ以上のトンネリング プロトコル ( ) は、tunnelingデータ パケットをカプセル化することによって、あるネットワークから別のネットワークへの送信を実現するために使用されます。具体的には、トンネリング プロトコルはデータ パケット (フレーム) に重点を置いています。

オーバーレイネットワークトポロジ

一般的なネットワーク トンネリング テクノロジ

  • ジェネリック ルーティング カプセル化 (  Generic Routing Encapsulation ) は、IPv4/IPv6 からのパケットを別のプロトコルのパケットにカプセル化するために使用され、通常は L3 ネットワーク層で機能します。

  • VxLAN ( ) は単純なトンネリング プロトコルであり、基本的には、 デフォルト ポートとして4789Virtual Extensible LANを使用して、L2 イーサネット フレームを L4 の UDP パケットにカプセル化する方法です 。 これは、  4096 (ビット) から 1600 万 (ビット  ) の論理ネットワーク への拡張で もあります。VxLANVLANVLAN IDVN·ID

この種の作業では overlay 通常、 モデルの下のモード  に と flannel が 含まれます 。calicoVxLANIPIP

IPIP

IP in IP これもトンネリング プロトコルであり、 VxLAN 同様に、IPIP 実装も Linux カーネル関数を通じてカプセル化されます。IPIP カーネル モジュールは、 ipip.ko コマンドを使用して、カーネルが IPIP モジュールをロードするかどうかを確認する必要がありますlsmod | grep ipip 。このコマンドを使用してmodprobe ipip 、それをロードします。

シンプルな IPIP ネットワーク ワークフロー

Kubernetes の Kubernetes IPIP と 同様にVxLAN 、これもネットワーク トンネリング技術によって実現されます。違い VxLAN は、VxLAN 本質的には UDP パケットですが、 IPIP パケットが独自のパケット内にカプセル化されていることです。

Kubernetes の IPIP

Wireshark アンパックを使用した IPIP パケット

注: Azure などのパブリック クラウドでは IPIP トラフィックが許可されない場合があります。

VxLAN

kubernetes における  VxLAN の実装は Linux カーネル機能によってカプセル化されています。Linux は長い間 vxlan プロトコルをサポートしていませんでした。2012 年に Stephen Hemminger が関連作業をカーネルに統合し、最終的にカーネル 3.7.0 バージョンで登場しましたflannel 。 calico安定性と多くの機能を確保するために、一部のソフトウェアはカーネル バージョン 3.9.0 以降で使用することが推奨されている場合があります VxLAN

シンプルな VxLAN ネットワーク トポロジ

たとえば、kubernetes の vxlan ネットワークでは、 flannelデーモン プロセスは kubernetes のノードに従って維持され VxLAN、名前は flannel.1 this VNIDとなり、このネットワークのルートは維持されます。ノード間のトラフィックが発生すると、 VxLAN ピアの MAC アドレスが維持されます。アドレスは送信先を知ることができるため、パケットを相手側に送信することができ、パケットを受信した相手側の VxLAN デバイスは、解凍後に実際の宛先アドレスを取得します flannel.1 。

Forwarding database リストを見る 

$ bridge fdb
26:5e:87:90:91:fc dev flannel.1 dst 10.0.0.3 self permanent

Kubernetes の VxLAN

Wireshark アンパックを使用した VxLAN パケット

注: VxLAN で使用されるポート 4789、Wireshark はポートに応じてプロトコルを分析する必要があります。Linux のフランネルのデフォルト ポートは 8472 です。現時点では、パケット キャプチャには 1 つの UDP パケットのみが表示されます。

上記のアーキテクチャから、トンネルは実際には抽象的な概念であることがわかります。トンネルは確立の両端にある実際のトンネルではなく、物理デバイスを介して送信された後、データ パケットを別のデータ パケットにカプセル化することによって、同じデバイス (ネットワーク トンネル) を展開してネットワークの重畳を実現します。

ウィーブvxlan

Weave はまた、 VxLAN パッケージのカプセル化を完了するテクノロジを使用します。このテクノロジは weave in で呼び出され、  および で使用されるテクノロジfastdp (fast data path)と は異なります 。ここでは Linux カーネルで使用され 、weave はネットワーク トラフィックを暗号化します。calicoflannelopenvswitch datapath module

ウィーブ fastdp ネットワーク トポロジ

注: fastdp は Linux カーネル バージョン 3.12 以降で動作しますが、CentOS7 など、このバージョンより低い場合、weave は weave で呼び出されるユーザー空間で動作します。 sleeve mode

参照

https://github.com/flannel-io/flannel/blob/master/Documentation/backends.md#host-gw
https://projectcalico.docs.tigera.io/networking/bgp
https://www.weave. works/docs/net/latest/concepts/router-encapsulation/
https://github.com/k8snetworkplumbingwg/sriov-network-device-plugin
https://github.com/nokia/danm

おすすめ

転載: blog.csdn.net/m0_37723088/article/details/130711661