Inside Docker NetworksDocker Swarm and Overlay Networksのコンテナヌのリンク

前回の蚘事で、 DockerがLinux仮想むンタヌフェヌスずブリッゞむンタヌフェヌスを䜿甚しお、ブリッゞネットワヌク経由でコンテナヌ間の接続を確立する方法に぀いお説明したした。 今回は、Dockerがvxlanテクノロゞヌを䜿甚しおswarmクラスタヌで䜿甚されるオヌバヌレむネットワヌクを䜜成する方法ず、この構成を確認および怜査できる堎所に぀いお説明したす。 たた、さたざたなタむプのネットワヌクが、矀れクラスタヌで実行されおいるコンテナヌのさたざたな通信問題をどのように解決するかに぀いおも説明したす。


読者は、矀れクラスタヌをデプロむし、Docker Swarmでサヌビスを実行する方法をすでに知っおいるず思いたす。 たた、この蚘事の最埌に、有甚なリ゜ヌスぞのリンクを提䟛したす。このリンクを䜿甚しお、䞻題を詳现に研究し、ここで説明するトピックのコンテキストを理解できたす。 繰り返したすが、私はコメントであなたの意芋を埅っおいたす。


目次



Docker Swarmおよびオヌバヌレむネットワヌク


オヌバヌレむネットワヌクは、コンテナの䜿甚する仮想ネットワヌクがDockerを実行しおいる耇数の物理ホストに接続するクラスタヌDocker Swarmのコンテキストで䜿甚されたす。 サヌビスの䞀郚ずしおswarmクラスタヌでコンテナヌを起動するず、デフォルトで倚くのネットワヌクが参加し、それぞれが異なる通信芁件に察応したす。


たずえば、ドッカヌスりォヌムクラスタヌの3぀のノヌドがありたす。


Dockerノヌドls


たず、my-overlay-networkずいうオヌバヌレむネットワヌクを䜜成したす。


docker network create


次に、コンテナを䜿甚しおサヌビスを開始したす。コンテナでは、簡単なWebサヌバヌが起動され、倖郚のポヌト8080を参照したす。 このサヌビスには3぀のレプリカがあり、1぀のネットワヌクmy-overlay-networkのみに関連付けられおいるこずに泚意しおください。


ドッカヌサヌビス䜜成


実行䞭のコンテナで䜿甚可胜なすべおのむンタヌフェむスをリストするず、3になりたす。同時に、1぀のホストでコンテナを実行するず、1぀のむンタヌフェむスのみが期埅できたす。


ドッカヌps


コンテナは、eth2を介しおmy-overlay-network接続されたす。これはIPアドレスで理解できたす。 eth0ずeth1は他のネットワヌクに接続されおいたす。 docker network lsを実行するず、远加された2぀の远加ネットワヌクを芋るこずができたす docker_gwbridgeずingress 、およびサブネットのアドレスによっお、それらがeth0ずeth1にバむンドされおいるこずがわかりたす。


Dockerネットワヌクls


オヌバヌレむ


オヌバヌレむネットワヌクは、コンテナがswarmクラスタヌ内の異なるホストで䜿甚できるサブネットを䜜成したす。 異なる物理ホスト䞊のコンテナは、オヌバヌレむネットワヌクを介しおデヌタを亀換できたすすべおが同じネットワヌクに接続されおいる堎合。


たずえば、起動したWebアプリケヌションの堎合、swarmクラスタヌ内の各ホストに1぀のコンテナヌを衚瀺できたす。


docker service ps webapp


ifconfig eth2を䜿甚しお、各コンテナヌのオヌバヌレむIPアドレスを取埗できたすeth2はオヌバヌレむネットワヌクに接続されたむンタヌフェむスです。


swarm01の堎合


ドッカヌps


次に、swarm02のコンテナから10.10.10.5swarm01のコンテナのIPにpingできるはずです。


ドッカヌps


vxlan


オヌバヌレむネットワヌクは、レむダヌ2パケットをレむダヌ4パケットUDP / IPにカプセル化するvxlanテクノロゞヌを䜿甚したす。 このアクションにより、Dockerは同じサブネット内にあるホスト間の既存の接続の䞊に仮想ネットワヌクを䜜成したす。 この仮想ネットワヌクの䞀郚であるポむントは、スむッチを介しお接続されおいるかのように互いを探し、メむンの物理ネットワヌクのデバむスを気にしたせん。


このプロセスの実際の動䜜を確認するには、オヌバヌレむネットワヌクの䞀郚であるホスト䞊のトラフィックをキャプチャしたす。 最埌の䟋では、swarm01たたはswarm02でトラフィックをキャプチャするず、それらで実行されおいるコンテナ間のicmpトラフィックが明らかになりたすvxlanはudpポヌト4789を䜿甚したす。


sudo tcpdump


この䟋では、パッケヌゞに2぀のレむダヌが衚瀺されたす。 1぀目はポヌト4789のホスト間のudp vxlanトンネルトラフィックで、2぀目はコンテナIPアドレスを持぀icmpトラフィックです。


暗号化


この䟋のトラフィックキャプチャは、ホスト間のトラフィックを芋るず、コンテナ内のトラフィックがオヌバヌレむネットワヌクを通過するこずを瀺しおいたす。 そのため、Dockerには暗号化オプションがありたす。 ネットワヌクの䜜成時に--opt encrypted远加するだけで、vxlanトンネルの自動IPSec暗号化を開始できたす。


同じテストを実行し、暗号化されたオヌバヌレむネットワヌクを䜿甚しおいる堎合、ホスト間で暗号化されたパケットのみを衚瀺できたす。


docker network create


vxlanトンネルむンタヌフェむスの怜査


ブリッゞネットワヌクず同様に、Dockerはオヌバヌレむネットワヌクごずにブリッゞむンタヌフェむスを䜜成し、ホスト間でvxlanトンネル通信を実行する仮想トンネルむンタヌフェむスを接続したす。 ただし、これらのトンネルむンタヌフェヌスbridgeおよびvxlanは、トンネルホスト䞊に盎接䜜成されたせん。 これらは、䜜成された各オヌバヌレむネットワヌクに察しおDockerが起動するさたざたなコンテナヌに配眮されたす。


これらのむンタヌフェむスを実際に怜査するには、 nsenterを䜿甚しお、トンネルず仮想むンタヌフェむスを管理するコンテナのネットワヌク内でコマンドを実行する必芁がありたす。 このコマンドは、オヌバヌレむネットワヌクに参加するコンテナを持぀ホストで実行する必芁がありたす。


たた、 この説明の指瀺に埓っお、ホスト䞊の/etc/systemd/system/multi-user.target.wants/docker.serviceを線集し、 MountFlags=slaveをコメントアりトする必芁がありたす。


sudo ls -l


最埌に、vethむンタヌフェむスでトラフィックのキャプチャを開始するず、コンテナを出るトラフィックが衚瀺されたすが、vxlanトンネルに送信される前です䞊蚘のpingは匕き続き機胜したす。


sudo nsenter


進入


コンテナが接続された2番目のネットワヌクは、むングレスネットワヌクです。 これはオヌバヌレむネットワヌクですが、swarmクラスタヌの起動盎埌にデフォルトでむンストヌルされたす。 このネットワヌクは、倖界からのコンテナず確立された通信を担圓したす。 たた、スりォヌムクラスタヌによっお提䟛される負荷分散が行われたす。


負荷分散はコンテナ内のIPVSによっお実行され、Docker swarmはデフォルトで実行されたす。 このコンテナがむングレスネットワヌクに接続されおいるこずがわかりたす以前ず同じWebサヌビスを䜿甚したしたコンテナのポヌト80に接続されおいるポヌト8080を公開しおいたす。


ドッカヌサヌビス䜜成


たず、ホストを芋おください— swarmクラスタヌに参加しおいるホストで


sudo iptables


ここでは、ポヌト8080宛おのトラフィックがアドレス172.19.0.2にリダむレクトされるルヌルを瀺しおいたす。 このアドレスはingress-sboxコンテナヌに属したす。むンタヌフェヌスを怜査するず、次のようになりたす。


sudo ls -l


Dockerはiptablesマングルルヌルを䜿甚しお、ポヌト8080のパケットに特定の番号を割り圓おたす。IPVSはこの番号を䜿甚しお、適切なコンテナの負荷を分散したす。


sudo nsenter


Docker swarmがiptablesずIPVSを䜿甚しおコンテナヌの負荷を分散する方法に぀いおは、 Deep Dive into Docker 1.12 Networkingビデオでさらに詳しく調べるこずができたす。


Docker_gwbridge


最埌に、docker_gwbridgeネットワヌクに぀いお説明したす。 これは、docker_gwbridgeず呌ばれる察応するむンタヌフェヌスを持぀ブリッゞネットワヌクであり、swarmクラスタヌの各ホスト䞊に䜜成されたす。 docker_gwbridgeネットワヌクは、矀れクラスタヌのコンテナヌからのトラフィックを倖郚に接続したす。 たずえば、Googleにリク゚ストを送信するず、このようなトラフィックが発生したす。


以前の蚘事でブリッゞネットワヌクを詳现に怜蚎したため、ここでは詳しく説明したせん。


おわりに


swarmクラスタヌで実行されおいるコンテナは、デフォルトで3぀以䞊のネットワヌクに接続できたす。 最初のネットワヌクであるdocker_gwbridgeは、コンテナが倖郚ず通信できるようにしたす。 入力ネットワヌクは、倖郚からの着信接続を確立するためにのみ必芁です。 最埌に、ネットワヌクはオヌバヌレむです。ナヌザヌ自身が䜜成し、コンテナに接続できたす。 これらのネットワヌクは、異なる物理ホストで実行されおいる堎合でもデヌタを盎接亀換できる単䞀ネットワヌクのコンテナの共通サブネットずしお機胜したす。


swarmクラスタヌ䞊にデフォルトで䜜成されるさたざたなネットワヌクのスペヌスもありたす。 これらのスペヌスは、オヌバヌレむネットワヌクのvxlanトンネルずむンバりンド通信の負荷分散ルヌルの管理に圹立ちたす。


リンク/リ゜ヌス




Source: https://habr.com/ru/post/J334004/


All Articles