Kubernetes コンテナ ネットワーク モデルの分析

Kubernetes コンテナ ネットワーク モデルの分析

クラウド ネイティブは、クラウドとネイティブの 2 つの部分で構成される技術システムまたはエコシステムと考えることができます。クラウドとは、アプリケーションが従来のデータセンターではなくクラウドに配置されることを意味します。ネイティブとは、アプリケーションが最初からクラウド環境を念頭に置いて設計され、クラウド向けに設計され、クラウドで最適に実行され、クラウド プラットフォームの弾力性と分散の利点を最大限に活用して発揮することを意味します。

[[435838]]

クラウド ネイティブの代表的なテクノロジー システムには、コンテナー、サービス メッシュ、マイクロサービス、不変インフラストラクチャ、宣言型 API などがあります。この記事では、主にコンテナ技術に基づくコンテナ オーケストレーション エコシステム K8S のネットワーク トラフィック モデルを分析し、クラウド ネイティブ エコシステムにおけるコンテナ技術の応用と実装について、誰もがより深く理解できるようにします。

Kubernetes はフラットなアドレス空間、非 NAT ネットワーク構造に基づいており、ホストとコンテナ間のポート マッピングは必要ありません。このネットワーク モデルの主な特徴は、ホストとコンテナー間でポートをマッピングする必要がなくなることです。まず、全体的なアーキテクチャ トポロジ モデルを見てみましょう。

コンテナ ネットワークには主に次のアドレスが関係します。

  • ノード IP: 物理マシンのアドレス。
  • Pod Ip: Kubernetes の最小のデプロイメント単位は Pod です。 Pod には 1 つ以上のコンテナを含めることができます。簡単に言えば、コンテナには独自の個別のアドレスがありません。これらは Pod のアドレスとポート範囲を共有します。
  • ClusterIp: サービスの IP アドレス。仮想 IP アドレスであるため、外部ネットワークはアドレスに対して ping を実行できません。このアドレスを担当するネットワーク デバイスはありません。内部実装では、Iptables ルールを使用してローカル ポートにリダイレクトし、バックエンド Pod にバランスを取ります。 Kubernetes クラスター内の内部アクセスにのみ使用されます。
  • パブリック IP: クラスター IP 範囲プール内のサービス オブジェクトに割り当てられた IP は内部的にのみアクセスでき、アプリケーション内のレイヤーとして適しています。このサービスがフロントエンド サービスとして使用され、クラスター外部の顧客にサービスを提供する準備ができている場合は、このサービスにパブリック IP を提供する必要があります。

コンテナネットワークトラフィックモデル

1. POD内のコンテナ間の通信

Pod 内のコンテナは、「localhost」を介して相互に通信できます。同じネットワーク名前空間を使用します。コンテナ自体の場合、ホスト名はそのポッドの名前になります。 Pod 内のすべてのコンテナは同じ IP アドレスとポート空間を共有するため、接続を受信する必要があるコンテナごとに異なるポートを割り当てる必要があります。つまり、Pod 内のアプリケーションはポートの使用を自ら調整する必要があります。

内部実装メカニズム: 同じポッド内のコンテナは実際には同じ名前空間を共有するため、同じ IP とポート空間を使用します。名前空間は、Pause と呼ばれる小さなコンテナーによって実装されます。 Pod が作成されるたびに、最初に Pause コンテナが作成されます。その後、Pod 内の他のコンテナは、Pause コンテナのネットワーク スタックを共有して外部 Pod と通信します。したがって、同じ Pod 内のすべてのコンテナでは、表示されるネットワーク ビューは同じになります。コンテナ内に表示されるアドレス、つまり Pod アドレスは、実際には Pause コンテナの IP アドレスです。全体的なモデルは次のとおりです。

2. 同一ホスト上のPOD間の通信

各ノード上の各ポッドには独自の名前空間があります。同じホスト上の Pod はどのように相互に通信するのでしょうか?通信のために 2 つの Pod 間で Vet ペアを確立できますが、コンテナが複数ある場合は、Vet をペアで確立するのは非常に面倒です。 N 個のポッドがある場合、n(n-1)/2 個の Veth ペアを作成する必要がありますが、これはスケーラビリティが非常に低くなります。これらの Veth ペアを集中転送ポイントに接続できれば、それらを均一に転送するのが非常に便利になります。この集中転送ポイントは、以下に示すように、ブリッジと呼ばれることが多いものです。

3. ホスト間のPOD間の通信

現在、ネットワーク上の 2 つのエンドポイント間の相互通信には、主に 2 つのソリューションがあります。1 つはアンダーレイ直接相互通信に基づくもので、両者が互いのルーティング情報を持っている必要があり、ルーティング情報はアンダーレイ パス上に存在する必要があります。 1 つは、トンネルを介した相互通信を実現するオーバーレイ ソリューションに基づいています。アンダーレイ層では、ホストに到達可能であることを確認するだけで十分です。代表的なネットワーク ソリューションとしては、Calico (ダイレクト モード) や Macvlan などがあります。後者には、オーバーレイ、OVS、フランネル、ウィーブが含まれます。この記事では、Flannel プラグインと Calico プラグインについて簡単に紹介します。

フランネルプラグイン

Flannel は CoreOS によって開発されたプロジェクトであり、コンテナ間およびホスト間のネットワークを改善するために設計された、コンテナ オーケストレーション システムにおけるネットワーク ファブリックの最も成熟した例の 1 つです。

他のソリューションと比較すると、Flannel はインストールと構成が比較的簡単です。これは単一のバイナリ ファイル Flanneld としてパッケージ化されており、多くの一般的な Kubernetes クラスター デプロイメント ツールと多くの Kubernetes ディストリビューションでは、デフォルトで Flannel をインストールできます。 Flannel は、Kubernetes クラスターの既存の Etcd クラスターを使用して API 経由で状態情報を保存できるため、専用のデータ ストアは必要ありません。ワークフロー図は次のとおりです。

基本的なプロセスは次のとおりです。

1. アドレスの割り当て

Flanneld が初めて起動されると、etcd から構成された Pod ネットワーク セグメント情報を取得し、このノードに未使用のアドレス セグメントを割り当てて、flanneldl.1 ネットワーク インターフェイスを作成します (flannel1 など、他の名前を持つ場合もあります)。 Flannel は、割り当てられた Pod ネットワーク セグメント情報を /run/flannel/docker ファイルに書き込みます (ファイル名は k8s のバージョンによって異なります)。その後、Docker はこのファイル内の環境変数を使用して docker0 ブリッジを設定し、このアドレス セグメントがこのノードに属するようにします。

2. ルーティング

各ホスト上で、Flannel は flanneld と呼ばれるデーモン プロセスを実行し、カーネル内にルーティング テーブルを作成します。

3. データプレーンのカプセル化

Flannel は外部のカプセル化アドレスを認識した後、メッセージをカプセル化します。送信元は独自の物理 IP アドレスを使用し、宛先はピアの Vxlan 外部 Udp ポート 8472 を使用します (UDP カプセル化でデフォルトの宛先ポートとして 8285 が使用される場合、これについては後述します)。ピアはポートを監視するだけで済みます。ポートはメッセージを受信すると、そのメッセージを Flannedld プロセスに送信します。このプロセスは、カプセル化のためにメッセージを Flanned インターフェイスに送信し、次にローカル ルーティング テーブルを照会して宛先アドレスを取得します。

Flannel 関数は、内部的に次の 3 つの異なるバックエンド実装をサポートしています。

  • Host-gw: 2 つのホストが同じネットワーク セグメントに存在する必要があり、クロスネットワークをサポートしていないため、大規模な展開には適していません。
  • UDP: カーネルが Vxlan をサポートしていない場合、またはデバッグに使用されない限り、使用はお勧めしません。非推奨となりました。
  • Vxlan: Vxlan カプセル化。Flannel は Vxlan テクノロジーを使用して、相互に通信できる各ノードの Pod ネットワークを作成します。使用されるポートは Udp 8472 です (パブリック クラウド AWS などではこのポートを開く必要があります)。

Calico プラグイン

Calico は 3 つのルーティング モードをサポートしています。

  • 直接: メッセージをカプセル化せずにルーティング転送します。
  • Ip-In-Ip: Calico のデフォルトのルーティング モード。データ プレーンは IP カプセル化を使用します。
  • Vxlan: vxlan カプセル化。

この記事では主にダイレクト モードを紹介します。ダイレクト モードでは、ソフト ルーティングを使用して BGP を確立し、コンテナ ネットワーク セグメントをアナウンスします。これにより、ネットワーク全体のすべてのノードとネットワーク デバイスが相互にルーティング情報を持ち、アンダーレイを介して直接転送します。 Calico 実装の全体的な構造は次のとおりです。

データ通信プロセスは次のとおりです。データ パケットは最初に veth デバイスから他のポートに送信され、ホスト マシン上の Cali から始まる仮想ネットワーク カードに到着します。この端に到達すると、ホスト マシン上のネットワーク プロトコル スタックにも到達し、ルーティング テーブルを照会して転送します。ローカル マシンは Bird を介して RR と BGP ネイバー関係を確立するため、ローカル コンテナ アドレスが RR に送信され、ネットワーク内の他のノードに反映されます。同様に、他のノードのネットワーク アドレスもローカル マシンに送信され、Felix プロセスによって管理されてルーティング テーブルに送信されます。メッセージがルーティング ルールに一致すると、正常に転送できます。より複雑な Iptables ルールについては、スペースの制限により、今回は分析しません。

4. クラスタ内のサービスクラスタIPと外部アクセス

Serice および外部通信シナリオの実装には、多くの iptables 転送原則が関係します。これらを簡単に紹介します。

ポッドとサービスの通信: ポッドが互いの IP アドレスを認識している場合、ポッドは IP アドレスを介して直接通信できます。 Kubernetes クラスターでは、Pod が頻繁に破棄および作成される可能性があるため、Pod の IP アドレスは固定されません。この問題を解決するために、Service は Pod にアクセスするための抽象化レイヤーを提供します。バックエンドの Pod がどのように変更されても、サービスは外部サービスを提供する安定したフロントエンドとして機能します。同時に、サービスは高可用性と負荷分散機能も提供します。サービスは、リクエストを適切なポッドに転送する役割を担います。

外部通信: Pod IP またはサービス クラスター IP のいずれであっても、Kubernetes クラスター内でのみ表示されます。外部の世界では、これらの IP は非公開です。 Kubernetes は、外部が Pod と通信するための 2 つの方法を提供します。

NodePort: サービスは、クラスター ノードの静的ポートを通じて外部にサービスを提供します。外部からは以下の方法でサービスにアクセスできます。

LoadBalancer: サービスは、クラウド プロバイダーが提供するロード バランサーを使用して外部にサービスを提供します。クラウド プロバイダーは、ロード バランサーのトラフィックをサービスに送信する責任を負います。

<<:  武漢クラウドは世界に輝く真珠を育てるデジタル基盤を構築

>>:  マイクロソフトがクラウド事業を再編。新着情報?

推薦する

#一時停止の推奨#prohostingserver-$7/Kvm/2g メモリ/80g ハードディスク/1T トラフィック/Win

Prohostingserver は、2009 年から仮想ホスティング、再販業者、および VPS サ...

上位 6 つのコンテナ パイプラインの比較: 構成、利点、制限、価格

[51CTO.com クイック翻訳] ご存知のとおり、DevOps によってもたらされた大きな変化に...

dedipath: 米国の格安サーバー、月額 39 ドルから、e3-1240v2/16g メモリ/2T ハードディスク/10T トラフィック/5IP、オプションでロサンゼルスとニューヨーク

在庫が多すぎるせいか、dedipath は米国サーバーの販売を開始しました。米国西海岸のロサンゼルス...

分類情報ウェブサイトを利用してウェブサイトの重量を改善することについての簡単な説明

ウェブサイト最適化業界には、「内部リンクは王、外部リンクは皇帝」という格言があります。これは、ウェブ...

クラウドで無駄を避ける5つの方法

多くの企業がクラウド コンピューティングを採用する重要な理由の 1 つは、サーバー ルームやデータ ...

不安定なウェブサイトのキーワードに対する迅速な解決策

みなさんこんにちは。私はハルビン仮想および現実ウェブサイトデザインです。最近、私のウェブサイトは常に...

Cloud+ CommunityとKuaishouが共同で、5つの人気のビッグデータ技術の詳細な分析を提供

[51CTO.com からのオリジナル記事] データは企業にとって貴重な資産となっています。データ分...

わずか 3 ステップで Docker を使用して Nginx リバース プロキシを作成する

Web アーキテクチャでは、俊敏性とスケーラビリティが不可欠であり、最適なパフォーマンスを確保しなが...

Kubernetes クラスタ管理を 1 つの記事で理解する

ピクセル;パディング: 0px;背景: なし 0% 0% / 自動繰り返しスクロール パディングボッ...

オンラインマーケティングの真髄:ユーザーに「商品」への理解を深めてもらう

今日では、インターネット マーケティングは人気の概念となり、業界関係者全員がその重要性を認識していま...

近年のSEOの急速な発展をもたらした3つの主な要因

最も主流のオンラインプロモーションの方法は何ですか?と聞かれたら、数え切れないほどのウェブマスターの...

インドに海外進出するクラウド コンピューティング企業が知っておく必要があるポリシーは何ですか?

インドにおけるクラウドコンピューティングのブームクラウド コンピューティングにより、政府、企業、消費...

これは私が個人的に「SEO業界は2年以内に消滅する」と考えていることです

昨日、「フォーブス:SEOは終わり、ソーシャルリアルタイムコンテンツが流行」というタイトルの記事がネ...

テキスト広告とイメージ広告でトラフィックを誘致し、ユーザーを維持する方法

少し前の医療業界の大規模な格下げにより、ほとんど誰もその影響を受けず、私たちの美容整形病院も例外では...

ウルムチのウェブサイト構築会社では、ウェブサイトの作成の役割を説明したい顧客がいます

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますインターネ...