オーバーレイネットワーク分析組み込みのホスト間ネットワーク通信は、常に Docker の待望の機能でした。バージョン 1.9 より前には、Macvlan、Pipework、Flannel、Weave など、この問題を解決しようとするサードパーティのツールや方法がコミュニティにすでにたくさんありました。 これらのソリューションは実装の詳細において多くの違いがありますが、その考え方はレイヤー2 VLANネットワークとオーバーレイネットワークの2つのタイプに分けられます。 簡単に言えば、ホスト間通信を解決するためのレイヤー 2 VLAN ネットワークの考え方は、元のネットワーク アーキテクチャを大規模な相互接続されたレイヤー 2 ネットワークに変換し、特定のネットワーク デバイスを介して直接ルーティングし、コンテナー間のポイントツーポイント通信を実現することです。このソリューションは、伝送効率の点でオーバーレイ ネットワークよりも優れていますが、いくつかの固有の問題もあります。 この方法は、レイヤー 2 ネットワーク デバイスからのサポートを必要とし、後者ほど汎用性や柔軟性がありません。 スイッチで使用できる VLAN の数は通常 4,000 程度であるため、コンテナ クラスターの規模が制限され、パブリック クラウドや大規模なプライベート クラウドの導入要件を満たすにはほど遠いものになります。大規模なデータ センターに VLAN を導入すると、VLAN のブロードキャスト データがデータ センター全体に溢れ、大量のネットワーク帯域幅が消費され、メンテナンスが困難になります。 対照的に、オーバーレイ ネットワークとは、既存のネットワーク インフラストラクチャを変更することなく、特定の合意された通信プロトコルを介して IP メッセージの上にレイヤー 2 メッセージをカプセル化する新しいデータ形式を指します。これにより、成熟した IP ルーティング プロトコル プロセスのデータ配信が最大限に活用されるだけでなく、オーバーレイ テクノロジーの拡張分離識別ビットを使用して 4000 の VLAN 制限を突破し、最大 1600 万人のユーザーをサポートし、必要に応じてブロードキャスト トラフィックをマルチキャスト トラフィックに変換して、ブロードキャスト データのフラッディングを回避できます。 したがって、オーバーレイ ネットワークは、実際には現在最も主流のコンテナ クロス ノード データ転送およびルーティング ソリューションです。 コンテナが 2 つのホスト間で通信する場合、オーバーレイ ネットワーク モードを使用して通信を行います。ホストを使用する場合は、物理 IP アドレスを直接使用してホスト間通信を実現することもできます。オーバーレイは、IP アドレス 10.0.2.3 などの仮想ネットワークを作成します。このオーバーレイ ネットワーク モードでは、サービス ゲートウェイと同様のアドレスがあり、パケットは物理サーバーのアドレスに転送され、ルーティングとスイッチングを通じて最終的に別のサーバーの IP アドレスに到達します。 環境の紹介 |
ホスト名 | ip | システムバージョン |
---|---|---|
cdh1 | 10.30.10.111 | セントロス7 |
cdh2 | 10.30.10.112 | セントロス7 |
オーバーレイ ネットワークを実装するには、サービス検出が必要です。たとえば、consul は 10.0.2.0/24 などの IP アドレス プールを定義します。そこにはコンテナがあり、コンテナの IP アドレスはそこから取得されます。取得が完了するとens33を介して通信が行われるため、ホスト間の通信が可能になります。
Consul は docker を通じて cdh1 にデプロイされます。まず、cdh1 の docker 設定を変更して再起動する必要があります。
[root@cdh1 /]# vim /etc/docker/daemon.json //次の設定を追加します "live-restore": true [root@cdh1 /]# systemctl dockerを再起動します
"live-restore": true この構成により、Docker デーモンが停止または再起動された場合でもコンテナの実行を継続できます。
cdh1にconsulイメージをダウンロードして起動します
[root@cdh1 /]# docker pull コンスル [root@cdh1 /]# docker run -d -p 8500:8500 -h consul --name consul consul
cdh1のdocker設定を変更して再起動します
[root@cdh1 /]# vim /etc/docker/daemon.json # 「cluster-store」を構成するには、次の 2 行を追加します: 「consul://10.30.10.111:8500」 "クラスターアドバタイズ": "10.30.10.111:2375" [root@cdh1 /]# systemctl dockerを再起動します
cdh2のdocker設定を変更して再起動します
[root@cdh2 /]# vim /etc/docker/daemon.json # 「cluster-store」を構成するには、次の 2 行を追加します: 「consul://10.30.10.111:8500」 "クラスターアドバタイズ": "10.30.10.112:2375" [root@cdh2 /]# systemctl dockerを再起動します
cluster-store は consul サービスのアドレスを指定します。consul サービスは cdh1 のポート 8500 で実行されるため、両方のマシンの cluster-store 値はconsul://10.30.10.111:8500 になります。
cluster-advertiseはローカルマシンとconsul間の通信ポートを指定するため、ローカルマシンのポート2375として指定されます。
この時点で、http://10.30.10.111:8500/ から consul アドレスにアクセスできます。Key /Valueメニューの docker-nodes ディレクトリには、2 つの docker ノード cdh1 と cdh2 が表示されており、consul が正常に構成されていることがわかります。
この時点でオーバーレイ ネットワークを作成できます。まず、ノードに現在あるネットワーク タイプを確認します。
[root@cdh1 /]# docker ネットワーク ls ネットワーク ID 名前 ドライバー スコープ ab0f335423a1 ブリッジ ブリッジ ローカル b12e70a8c4e3 ホスト ホスト ローカル 0dd357f3ecae なし null ローカル
次に、cdh1 の docker ノードにオーバーレイ ネットワークを作成します。consul サービス検出が正常に実行されており、cdh1 と cdh2 の docker サービスがすでに接続されているため、オーバーレイ ネットワークはグローバルに作成され、どのホストでも 1 回作成できます。
[root@cdh1 /]# docker network create -d overlay my_overlay cafa97c5cf9d30dd6cef08a5e9710074c828cea3fdd72edb45315fb4b1bfd84c [root@cdh1 /]# docker ネットワーク ls ネットワーク ID 名前 ドライバー スコープ ab0f335423a1 ブリッジ ブリッジ ローカル b12e70a8c4e3 ホスト ホスト ローカル cafa97c5cf9d my_overlay オーバーレイ グローバル 0dd357f3ecae なし null ローカル
この時点で、作成されたオーバーレイ ネットワークが golbal としてマークされていることがわかります。 cdh2 ネットワークを確認すると、オーバーレイ ネットワークも作成されていることがわかります。
[root@cdh2 ~]# docker ネットワーク ls ネットワーク ID 名前 ドライバー スコープ 90d99658ee8f ブリッジ ブリッジ ローカル 19f844200737 ホスト ホスト ローカル cafa97c5cf9d my_overlay オーバーレイ グローバル 3986fe51b271 なし null ローカル
作成が完了したら、cdh1 と cdh2 でオーバーレイ ネットワークを指定して Docker コンテナを作成し、ホスト間で通信できるかどうかをテストできます。
cdh1にmasterという名前のコンテナを作成し、そのIPを表示します。
[root@cdh1 /]# docker run -itd -h マスター --name マスター --network my_overlay centos7_update /bin/bash [root@cdh1 /]# docker examine -f "{{ .NetworkSettings.Networks.my_overlay.IPAddress}}" マスター 10.0.0.2
cdh1にslaverというコンテナを作成し、そのIPを表示します。
[root@cdh2 ~]# docker run -itd -h slaver --name slaver --network my_overlay centos7_update /bin/bash [root@cdh2 ~]# docker examine -f "{{ .NetworkSettings.Networks.my_overlay.IPAddress}}" スレーブ 10.0.0.3
このとき、2 つのコンテナに入り、お互いの IP を ping して通信が成功するかどうかを確認します。
[root@cdh1 ~]# docker exec -it マスター /bin/bash [root@master /]# 10.0.0.3 にpingする PING 10.0.0.3 (10.0.0.3) 56(84) バイトのデータ。 10.0.0.3 からの 64 バイト: icmp_seq=1 ttl=64 time=0.587 ms 10.0.0.3 からの 64 バイト: icmp_seq=2 ttl=64 time=0.511 ms 10.0.0.3 からの 64 バイト: icmp_seq=3 ttl=64 time=0.431 ms 10.0.0.3 からの 64 バイト: icmp_seq=4 ttl=64 time=0.551 ms 10.0.0.3 からの 64 バイト: icmp_seq=5 ttl=64 time=0.424 ms ^C --- 10.0.0.3 ping 統計 --- 送信パケット 5 個、受信パケット 5 個、パケット損失 0%、時間 4000 ミリ秒 rtt 最小/平均/最大/平均偏差 = 0.424/0.500/0.587/0.070 ミリ秒
[root@cdh2 ~]# docker exec -it slaver /bin/bash [root@slaver /]# 10.0.0.2にpingする PING 10.0.0.2 (10.0.0.2) 56(84) バイトのデータ。 10.0.0.2 からの 64 バイト: icmp_seq=1 ttl=64 time=0.499 ms 10.0.0.2 からの 64 バイト: icmp_seq=2 ttl=64 time=0.500 ms 10.0.0.2 からの 64 バイト: icmp_seq=3 ttl=64 time=0.410 ms 10.0.0.2 からの 64 バイト: icmp_seq=4 ttl=64 time=0.370 ms ^C --- 10.0.0.2 ping 統計 --- 4 パケット送信、4 パケット受信、パケット損失 0%、時間 3000 ミリ秒 rtt 最小/平均/最大/平均偏差 = 0.370/0.444/0.500/0.062 ミリ秒
コミュニケーション成功!
これで、docker コンテナ間のホスト間通信 - オーバーレイベースの実装方法についての記事は終了です。docker コンテナ間のホスト間通信に関する詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。
>>: MySQL クエリの最適化: クエリが遅い原因と解決策
1. シーケンステーブルを作成する テーブル `sequence` を作成します ( `name` ...
<br />今日、新しくなった ChinaUI.com の Web サイトを見たのですが...
要素フォームとコード表示詳細はエレメントフォーム公式サイトをご覧ください構造と機能の分析紹介とソース...
入力タイプ「file」とは何ですか?これが何なのかは説明する必要はないと思います。誰もが知っているこ...
目次序文構築可能なスタイルシートとは何ですか? CSSモジュールスクリプトの使用インポートアサーショ...
序文そこでこのブログを書きました。このブログでは大物の記事からいくつかの知識も推奨しています。侵害が...
vueプロジェクトをパッケージ化してサーバーにデプロイし、正常にログインできるが、ローカルで起動する...
この記事では、アコーディオン効果を実現するためのjsの具体的なコードを参考までに共有します。具体的な...
背景すべての業務を Docker の運用管理に移行してから、一連の落とし穴に遭遇しましたが、今回は ...
この記事は主にSQLシリアル番号取得コード例を紹介します。記事ではサンプルコードを詳細に紹介しており...
目次1. はじめに2. Vue JS のパフォーマンス最適化が必要な理由は何ですか? 3. Vueの...
この記事では、WeChatアプレットの具体的なコードを参考までに共有します。具体的な内容は次のとおり...
目次簡単な紹介1. 現在のgccバージョンを確認する2. gccインストールパッケージ(バージョン1...
Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮想...
背景Alibaba Cloud RDS for MySQL(MySQL バージョン 5.7)データベ...