概要
この記事では、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-gw
calico
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 接続が削減されます。通常、 クライアント として 機能する のは実際のルーティング デバイスです 。flanneld
Calico
Brid
BGP
Router Reflector
BGP
Felix
BGP Peer
RR
AS
RR
Bird
BGP
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 が含まれます。
多くの
multus
cni
これはインテルのオープンソース CNI ソリューションであり、従来 型であり multus
、K8 ポッドが SR-IOV VF に接続できるようにする SR-IOV CNI プラグインを提供します。IPVLAN/MACVLAN
これが使われている関数です 。
新しいポッドが作成されると、SR-IOV プラグインが動作を開始します。構成 VF は新しい CNI 名前空間に移動されます。プラグインは、CNI 設定ファイルの「name」オプションに従ってインターフェイス名を設定します。最後に、VF ステータスを UP に設定します。
以下の図は、Multus と SR-IOV CNI プラグイン、3 つのインターフェイスを持つポッドのネットワーク環境です。
-
eth0
flannel
ネットワーク プラグイン であり 、ポッドのデフォルト ネットワークとしても機能します -
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 ( ) は単純なトンネリング プロトコルであり、基本的には、 デフォルト ポートとして4789
Virtual Extensible LAN
を使用して、L2 イーサネット フレームを L4 の UDP パケットにカプセル化する方法です 。 これは、 4096 (ビット) から 1600 万 (ビット ) の論理ネットワーク への拡張で もあります。VxLAN
VLAN
VLAN ID
VN·ID
この種の作業では overlay
通常、 モデルの下のモード に と flannel
が 含まれます 。calico
VxLAN
IPIP
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 はネットワーク トラフィックを暗号化します。calico
flannel
openvswitch 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