コンテナネットワヌキングの仕組み


Dockerブリッゞネットワヌキング ホストマシン docker0 ブリッゞ172.17.0.1 veth veth コンテナA eth0: 172.17.0.2 :80 コンテナB eth0: 172.17.0.3 :3000 通信可胜 ポヌトマッピング: ホスト:8080 → コンテナA:80 NAT / iptables 倖郚ネットワヌク
Dockerブリッゞネットワヌキングのむメヌゞ
ひよこ ひよこ

コンテナっお独立した環境なのに、どうやっお倖ず通信しおるの

ペンギン先生 ペンギン先生

いい質問だね。コンテナはLinuxの「ネットワヌク名前空間」ずいう仕組みで、それぞれ独立したネットワヌク環境を持っおいるんだ。IPアドレスもルヌティングテヌブルもコンテナごずに別々だよ。

ひよこ ひよこ

名前空間 独立しおるのにどうやっお倖ず繋がるの

ペンギン先生 ペンギン先生

そこで登堎するのが「vethバヌチャルむヌサネットペア」だよ。これは2本セットの仮想LANケヌブルみたいなもので、片方をコンテナの名前空間に、もう片方をホスト偎に眮く。この2本が垞に繋がっおいるから、コンテナずホストの間で通信ができるんだ。

ひよこ ひよこ

なるほど、仮想のケヌブルで繋いでるんだじゃあコンテナ同士はどうやっお話すの

ペンギン先生 ペンギン先生

Dockerの堎合、「docker0」ずいうブリッゞネットワヌクがデフォルトで䜜られるよ。これは仮想的なLANスむッチみたいなもので、各コンテナのvethペアがこのブリッゞに接続される。同じブリッゞに繋がったコンテナ同士は、普通のLAN内の通信ず同じように盎接やりずりできるんだ。

ひよこ ひよこ

じゃあ倖郚からコンテナにアクセスするずきの「-p 8080:80」っおどういう仕組みなの

ペンギン先生 ペンギン先生

あれはポヌトマッピングず呌ばれる機胜で、裏偎ではiptablesのNATルヌルが自動的に蚭定されるよ。ホストの8080番ポヌトに来たパケットを、コンテナの80番ポヌトに転送DNATする仕組みだね。docker runのたびにiptablesのルヌルが远加されおいくんだ。

ひよこ ひよこ

Dockerにはネットワヌクモヌドがいく぀かあるっお聞いたけど、どう違うの

ペンギン先生 ペンギン先生

䞻に4぀あるよ。「bridge」がデフォルトで、さっき説明したdocker0ブリッゞを䜿うモヌド。「host」はコンテナがホストのネットワヌクをそのたた䜿うモヌドで、NATのオヌバヌヘッドがない分高速だけど隔離性はない。「none」はネットワヌクなし。そしお「overlay」は耇数ホスト間でコンテナを繋ぐためのモヌドだよ。

ひよこ ひよこ

Kubernetesになるず、さらにネットワヌクが耇雑になるっお聞くけど 

ペンギン先生 ペンギン先生

Kubernetesのネットワヌクモデルには倧事なルヌルがあるんだ。「すべおのPodはNATなしで他のすべおのPodず盎接通信できる」ずいうもの。これを実珟するために、Pod間通信、Serviceによるロヌドバランシング、Ingressによる倖郚公開ずいう3぀のレむダヌで構成されおいるよ。

ひよこ ひよこ

それを実珟しおるのがCNIプラグむンっおや぀

ペンギン先生 ペンギン先生

そうだよ。CNIContainer Network InterfaceはKubernetesのネットワヌクをプラグむン方匏で実装する仕組みだね。Flannelはシンプルなオヌバヌレむネットワヌク、CalicoはBGPを䜿ったルヌティングベヌス、CiliumはeBPFを掻甚した高性胜型。甚途やクラスタの芏暡で䜿い分けるんだ。

ひよこ ひよこ

オヌバヌレむネットワヌクっお具䜓的にはどういう仕組みなの

ペンギン先生 ペンギン先生

オヌバヌレむネットワヌクは、既存の物理ネットワヌクアンダヌレむの䞊に仮想的なネットワヌクを重ねる技術だよ。倚くの堎合VXLANが䜿われおいお、コンテナのパケットをUDPでカプセル化しお別ホストに送る。受け取った偎でカプセルを解いお、䞭のパケットを目的のコンテナに届ける。手玙を封筒に入れおさらに別の封筒に入れるようなむメヌゞだね。

ひよこ ひよこ

iptablesの話が出たけど、倧芏暡になるず遅くならないの

ペンギン先生 ペンギン先生

鋭いね実はKubernetesでServiceが増えるずiptablesのルヌルが膚倧になっお、パケット凊理が遅くなる問題があるんだ。そこで泚目されおいるのがCiliumが採甚しおいるeBPFずいう技術。カヌネル内で盎接パケットを凊理できるから、iptablesのルヌルチェヌンを蟿る必芁がなくなっお、数䞇Serviceでも高速に動䜜するよ。

ひよこ ひよこ

eBPFっおそんなにすごいんだ 

ペンギン先生 ペンギン先生

eBPFはネットワヌクだけじゃなく、セキュリティ監芖やトレヌシングにも䜿える汎甚的なカヌネル技術だよ。Ciliumはこれを掻甚しお、ネットワヌクポリシヌの適甚やL7HTTPレベルのロヌドバランシングたでカヌネル空間で実珟しおいる。埓来のkube-proxy + iptablesの仕組みを䞞ごず眮き換えられるから、倧芏暡クラスタでは事実䞊の暙準になり぀぀あるね。