4.コンテナ仮想ネットワークの概要

住所からパート:https://blog.51cto.com/gouyc/2312408

ネットワークへの、ドッキングウィンドウはじめに

実装のドッキングウィンドウコンテナなどのネットワークは、必要不可欠である6つの名前空間の一つは、それはLinuxカーネル2.6のサポートでカーネルにロードされています。ネットワーク名前空間は、主に単離およびネットワーク機器のプロトコルスタックに使用される、例えば:ネットワークカードは、名前空間に割り当てられた容器を作成するときにドッカーホストは、4つのNICを有し、その後、他の名前空間を見ることができませんこのカード。そして:デバイスは、名前空間にのみ属することができます。名前空間は、物理ネットワークアダプタと外部とのコミュニケーション、および物理的なネットワークカードを結合するので、私たちは唯一の4つの名前空間を作成します複数の名前空間を、割り当てることはできません。あなたが私たちの物理的なカードの数より多くを作成したい名前空間は、それを行うにはどのようにか?

 仮想ネットワーク通信1、三つの方法

1.1ブリッジネットワーク

ドッキングウィンドウでは、例外ではありませんしながら、KVM仮想ネットワークでは、我々は、仮想ネットワークカードのデバイス(デバイスのグループを使用する方法をシミュレートするために、純粋なソフトウェア)を使用しています。Linuxカーネルレベルでは、レイヤ2つのデバイス(ワークパッケージは、各ネットワークデバイス内の物理リンク層パケットとパケット転送コンポーネントで達成することができる)は、アナログ・デバイセズ、2つのレベルをサポートし、そしてこの機能はですレイヤ2の仮想デバイス用のカーネルサポートを使用してLinux上の仮想ネットワーク・インタフェース・カードを作成します。また、ペアでこのユニークな仮想ネットワーク・インタフェース、ネットワークインタフェースデバイスそれぞれ、一端がホストに挿入することができ、他端がスイッチに挿入可能であり、ケーブルの端部をシミュレートすることができます。これは、スイッチを上に接続されたホストのと同じです。(ソフトウェアスイッチを構築するために使用)Linuxカーネルのネイティブサポートレイヤ2仮想ブリッジデバイス。例えば、私は2つの名前空間を有し、それぞれのネットワークに仮想ネットワークインタフェースを作成し、名前空間を差し込み、同じネットワークセグメント上の他の仮想ブリッジ装置に挿入端と、2つの名前空間の構成、ネットワークNにおける複数の容器がある場合、これは、すべてのコンテナが同じ仮想ブリッジデバイス上のすべてのブリッジであるため、ブロードキャストストームがスペーサ上に、生成され、コンテナ間の通信を可能にするが、このブリッジモードそれは非常に困難であるため、現場での容器の大きさ、間違いなくそれを求めるこのようにブリッジを使用して、または直接ブリッジするべきではありません。

1.2は、NATネットワーク

いいえブリッジ場合、しかし技術のNATを使用して、外部と通信します。NAT(ネットワークアドレス転送)ネットワークアドレス変換、IPパケットのヘッダのアドレス情報を交換することで、通信ネットワークは、内部ネットワークのIPアドレスを交換することにより、IPアドレス異なる出口であるが設けられています。たとえば、次の2つの容器は、異なるプライベートネットワークアドレスを備えており、容器に仮想ブリッジ(仮想スイッチ)の設定、仮想ブリッジの容器1ポイント、ゲートウェイIPアドレスが、その後、ドッカーホストにコアの転送をオンにしますこの場合には、容器1の通信と容器2、各仮想カーネルを介してブリッジへの最初のパケットではなく、その宛先IPアドレスが判定された場合、ルーティングテーブルを照会し、ネットワークカードに対応するパケットの後に、物理NICの近く(この操作はSNATと呼ばれる)は、独自のIPアドレスに元のメッセージパケットを交換した後、及び、物理NIC容器2へパケットを送信し、物理NICがパケットを受信すると、パケットは、元のIPを置換します仮想スイッチに、独自のIP(この操作はDNATと呼ばれる)のために、そして最終的に容器2に送られます。容器2がパケットを受信した後、同様の操作も同様に対象となる、返信パケットは、物理NICに配信元のIPアドレス(SNATとDNAT)の書き換え動作経過、容器1の物理ネットワーク・カードは、パケットを受信しますコンテナ1の仮想ブリッジにパケットを転送します。そのようなネットワークでは、2つのコンテナ通信が悪い通信効率が得られ、2つのNAT(SNATとDNAT)を経由しなければならないように、あなたは、物理ホスト間で必要な場合。マルチコンテナのシーンに適していません。

 1.3、オーバレイネットワーク

各容器は現在、彼らが通信するとき、メッセージを完了するために、物理的なネットワークでは、この仮想ブリッジアップに接続し、するためにホストされているように、オーバレイネットワークは、そのようなネットワークでは、異なるコンテナのホストは、仮想ブリッジを介して通信します他の容器は、異なるホストを参照して、したがって相互に通信できるようにトンネルを転送し、容器を実現することができます。例えば、他のホスト・コンテナ1上で通信するための容器2と容器1は、仮想ブリッジにパケットを送信し、宛先の仮想IPがローカルサーバー上に物理的にではないブリッジは、そのパケットの位置は、物理NICから送信されます前SNAT問題を行くが、IPヘッダの層を追加しない、元のアドレスは、宛先アドレスがホスト血管ネットワークカード2の物理アドレスである、容器1のネットワークカードの物理アドレスです。パケットがホスト、第1階層データパケットチャイワンは、レイヤヘッダがあることを見出し、及び現在のコンテナのホストアドレスのIPアドレスである達する、順番に仮想ブリッジにパケットを送信し、最終的に容器2に送られます。IPトンネルの別の実施形態に運ぶために、このIPが呼び出されます。

2、ドッカ4つのネットワークモデル

  • ブリッジモード:ブリッジコンテナ、ドッキングウィンドウのデフォルトのネットワークモデル、コンテナdocker0ネットワークへのネットワークアクセスは、NATです。
  • ホストモード:開放容器は、ネットワークの名前空間のホストを使用するコンテナは、コンテナは、ネットワーク機器のカードを参照して、ホスト、ネットワークデバイス情報を直接ネットワーク情報を修正する修正する物理マシンです。
  • なしモード:密閉容器、唯一のループインターフェース、他のネットワークカードは、ネットワーク通信を使用しないでください。
  • コンテナモード:2つの容器の間で共有される2つの容器が名前空間の一部を有するように、容器を接合(ユーザ、マウント、PID)他の名前空間(UTC、ネットワーク、IPC)から単離し、同じネットワークインターフェース、ネットワーク・プロトコル・スタックを有することになります。名前空間を共有コンテナは、コンテナがLoカードを介して2つの通信装置を処理することができ、コンテナが作成されています。

第二に、オペレーティング

1、一般的に使用されるコマンド

[ルート@オラクル〜]#]ドッキングウィンドウのネットワーク--help 
[ルート@オラクル〜]#]ドッキングウィンドウのネットワークLS
[ルート@オラクル〜]#]ドッキングウィンドウのネットワーク検査ブリッジ
[ルート@オラクル〜]#のIPリンクショー
[ルート@オラクル〜]# yumをインストールブリッジ-utilsの-y
[ルート@オラクル〜]#のbrctlショー

 2、ネットワークネームスペースの使用

[ルート@オラクル〜]#回転数が -qのiproute# 自分のipコマンド、あなたが動作することができnetns 
#1のIP netnsヘルプ[オラクル〜@ルート]
[ルートOracle〜@ ]は##のIPは、ネットワークの名前空間のNS1を追加するための追加をnetns
[ルート@オラクル]#1のIP netnsはNS2を追加します
[ルート@オラクル]#1のIP netnsリスト    
NS2
NS1
このネットワーク名前空間NSに#のIP netns ExecのNS1の#ifconfig -aコマンドの実行[オラクル〜@ルート]

 仮想ネットワークカードを作成し、名前空間のNS1にドロップします。

[ルート@オラクル〜]#のIPリンクのヘルプ
[ルート@オラクル〜]#のIPリンクveth1を追加します。1種類のvethピア名veth1。2 
[ルート@オラクル〜]#のIPリンクショー

[ルート@オラクル〜]#のIPリンクセットのdevのveth1。2 netns NS1 
[ルート@オラクル〜]#のIPリンクショー 
[ルート@オラクル〜]#1のIP netns幹部のNS1でifconfig -a

仮想NICが作成されて起動し、仮想NICの通信をしましょう。

SET devのはveth1。#1のIP IPリンクのnetns ExecのNS1 [オラクル〜@ルート] 2 名のeth0の#は、名前空間ns1のを修正するには、veth1.2という名前はeth0です
[ルートOracle @〜]#IPアドレスの追加10.01.1 / 24のdevのveth1。。1#NICは、ローカルアドレスのために提供
[ルートオラクル@〜]#ifconfigコマンドの veth1。。1 まで
[ルートOracleは@〜]#IP netns Execは、追加IPアドレスNS1 10.01.2 / 24 devのeth0のNIC#はアドレスNS1に設定されています
[ルート@オラクル〜]#1のIP netns幹部のNS1 のifconfig eth0をアップ
[ルート@オラクル〜]#1のIP netns幹部NS1のifconfigコマンド

 PS:我々はまた、それらに対処して起動するように設定、異なるネットワーク名前空間にネットワークカードを置くことができ、彼らはまた、通常の通信です。または異なるネットワークの名前空間の使用を入れて仮想NICの他のタイプを作成します。

2、ドッカーの例示的なネットワークモデル

[ルートOracle @〜] RUN#ドッカーコンテナ--name B1 - RM - ITのbusyboxの:最新の#のデフォルトのネットワークブリッジモード
[ルートオラクル@ - 〜] RUN#ドッカーコンテナが--name B1 RM ITが--network =迅速化最新のモードは、ネットワークブリッジ#を指定されている:ブリッジbusyboxのを
[ルートオラクル@〜] RUN#ドッカーコンテナ--name B1 - RM = ITを--network迅速化なしbusyboxのを:最新の#は、ネットワークモードはなし指定
[ルートオラクル@〜] RUN#ドッカーコンテナ--name B1 - RM ITを迅速化--network = -H b1.magedu.com橋- DNS = 8.88.8 --add-ホスト= www.magedu.com:10.00.1のbusybox:最新の#はネットワークモード、ホスト名、DNSを指定しますが、構文解析をホストファイルに追加され

、[ルートOracle @〜] RUN#ドッカーコンテナ--name B1 --rm ITのbusyboxのを迅速化:最新の
[ルートオラクル@〜]#ドッキングウィンドウコンテナの実行--name B2 --network =コンテナ :B1 --rm -itのbusybox:最新#1 IPC b1のシェア、ネットワーク、UTCの名前空間、LAN機器の二つの容器ビュー、ネットワーク情報、ホスト名です以下のような
[ルート@オラクル〜]#]ドッキングウィンドウのコンテナ--name B2 --network =ホスト--rm -it busyboxの実行:最新の#はホストを共有IPC、ネットワーク、UTCの名前空間、LAN機器を表示し、ネットワーク情報を、同じホストとホスト名

図3に示すように、露出された容器ポート

[ルートOracle @〜] RUN#ドッカー--name web1と- RM -p 80 registry.cn-hangzhou.aliyuncs.com/cmxu/httpd:v0。2 - ランダムホストにマッピングされ、容器に指定された1ポート#すべてのランダムなポートアドレス
[オラクル@ルート ## web1とドッカーコンテナコンテナを点検〜]は172にIPを表示することができます17.02 
[ルートOracle @〜]#カール172.17を0.2 
[ルートオラクル@〜]#iptablesの-t NAT -S#は、転送ルールを表示することができ
ます。[root @オラクルを〜]#ドッキングウィンドウのポートはweb1番号のコンテナ港暴露の眺め

[ルートオラクル@〜] RUN#ドッカー--nameはweb1 - RM -p 192.16842.133 :: 80 registry.cn-hangzhou.aliyuncs.com/cmxu/httpd:v0。2 - 1つの#80の容器の指定ポートマッピングランダムなアドレス192.168.42.133ポートをホストする
[ルートオラクル@〜] RUN番号ドッカー--nameはweb1 - RM -p 8080。registry.cn-hangzhou.aliyuncs.com/cmxu/httpd:v0 2 - 容器#1に指定されたポート80のホストポート80にマッピングされたすべてのアドレス
[ルートOracle @〜] RUN#ドッカーはweb1と--name - RM -p 192.16842.133808280registry.cn-hangzhou.aliyuncs.com/cmxu/httpd:v0。2 - 1#80を容器指定されたポートアドレスの指定されたポートにマッピングされるホスト8082が指定

 4、ネットワークアドレスが変更さdocker0

[ルート@オラクル〜]#のvimのは/ etc /ドッキングウィンドウ/ daemon.json
{
  " レジストリミラー":[ " https://xxxx.mirror.aliyuncs.com " ]
   " BIP "" 10.10.1.2/16 " 
  " DNS ":[ " 10.20.1.1 "" 10.20.1.2 " ]
}

あなただけが彼ら手動で指定しに行くことができ、ゲートウェイやその他の情報のドッキングウィンドウが自動的に計算、BIPするために設定ファイルを追加する必要があります。DNSは自動的に計算されていません。

5、デフォルト聞くドッカを変更

[ルート@オラクル〜]#のの/ etc /ドッキングウィンドウ/ daemon.json
{
  " レジストリミラー":[ " https://xxxx.mirror.aliyuncs.com " ]、
   " BIP "" 10.10.1.2/16 " " ホスト":[ " TCP://192.168.42.133:2375 "" UNIX:///var/run/docker.sock " ]
}
[ルート@オラクル〜]#ドッキングウィンドウ-H 192.16842.1332375の画像LS

6.ドッキングウィンドウのネットワークを作成します。

[ルート@オラクル〜]#]ドッキングウィンドウのネットワークの作成- ヘルプを
[ルートOracle @〜] -d#ドッカーネットワークブリッジを作成--subnet = 172.260.0 / 24 --gateway = 172.260.1 ブリッジ用に作成されたネットワーク型mybr0位、6種類(macvlanヌルオーバーレイipvlanブリッジホスト)が、いくつかは、環境要件があります。
[ルート@オラクル〜]#]ドッキングウィンドウのネットワークLS 
[ルート@オラクル〜]#]ドッキングウィンドウコンテナ--name B1実行- RM -it --network = mybr0 busyboxのを:最新

 異なるドッカーを使用して、同じホスト上の2つのコンテナを作成するファイアウォールルールがドッカー遮断を生成し、両方の容器は、直接通信することができない、ネットワークをブリッジ。オープンnet.ipv4.ip_forward = 1の場合は、あなたがどのようなファイアウォールルールを扱うことができ、あなたが通信することができます。

おすすめ

転載: www.cnblogs.com/cmxu/p/11624699.html