KDOC 477: 『Docker-Kubernetesネットワークのしくみ』

この文書のステータス

  • 作成
    • <署名>
  • レビュー
    • <署名>

概要

  • VXLANはVLANの拡張で、大規模なネットワークを仮想的に分割できる。EthernetフレームをUDP/IPパケットでカプセル化する。このカプセル化により、Ethernetフレームは自身のIPアドレスやMACアドレスを変更することなく、異なるネットワークセグメント間を移動できポータビリティが向上する(p15)
  • Networ Namespace(netns)を使用することでネットワークスタックを異なるNamespaceに分離し、互いに独立して動作させられる(p15)
アプリ
  - HTTP

|
| システムコール
v------

カーネル
  - TCP
  - IP
  - Ethernet
|
|------
v
- ハードウェア
  - NIC
  • ソケットにはIPアドレスとポート番号の組み合わせが記録され、通信元と通信先を指定している(p19)
  • 3way handshake のメリット(p20)
    • 相手先に転送を始めることを通知できる
    • 要求のあったポートを受け入れられるかチェックできる
    • 再送制御や流量制御ができる
  • IP層の役割は、TCP層から受け取ったデータにIPパケットを付与し、下位レイヤのL2にデータを送ること(p21)
  • ルーティングテーブルはルーティングプロトコルによって作成され、パケットが目的地に到達するための最良の経路を記録するしくみになっている。ルーティングプロトコルにはRIP, OSPF, BGPなどがある(p24)
  • Dockerではdocker0という仮想ブリッジがデフォルトで設定されている。このブリッジはコンテナが外部と通信するためのゲートウェイの役割を果たす(p25)
apt install bridge-utils
brctl show docker0
bridge name	bridge id		STP enabled	interfaces
docker0		8000.0242014087d9	no		veth8461c84
							vethd66994d
  • VLANは、物理ポートにIDを設定し、セグメントを分ける技術である。VLANを使わない場合は1つのスイッチに対して1つのセグメントしか設定できない(p34)
  • VLANの利点の1つは、複数のスイッチにまたがっても同一セグメント(Ethernetフレームをもとに通信が行われる範囲)として扱えることである。複数のスイッチを連携させて1つの大規模なL2ネットワークを構築できる。Ethernetフレームだけを見るのでIPアドレスのセグメントは変わらない(p34)
  • VXLANとは、同じL2ネットワーク上のEthernetフレームをL3ネットワークを介して送り届けられる技術である(p35)
  • パケットはネットワークデバイスを通過するときルーティングのためにそのパケットのヘッダ情報が書き換えられる(p36)
  • iptables の項目(p55)
    • テーブル: 処理機能を設定する
    • チェイン: ルールを適用するタイミングを設定する
    • ターゲット: iptablesルールに一致したパケットに対してどのようなアクションを取るか定義する
  • PREROUTINGチェインによるNAT変換が行われたあとにINPUT, OUTPUT, FORWARDが適用される。そのためフィルタリングルールを設定するときにはNAT変換後の情報を使うことが重要である(p57)

疑問や感想。

  • ブリッジ・スイッチ・ルーターの違い
  • フレームとパケットの違い
  • コンテナにもMACアドレスがある
  • コンテナのフラッティングとARPの違いがわからない(p27)
  • VXLANはL3ネットワーク上に仮想的なL2ネットワークを作り出すことからネットワークオーバーレイと呼ばれる(p35)
  • VXLANはEthernetフレームをUDP/IPでカプセル化するため、元のEthernetフレームの外側にさらにEthernetヘッダやIPヘッダがつけられる。これを「外部ヘッダ」という。もともとのEthernetフレーム内のヘッダは「内部ヘッダ」という(p35)
  • iptables から、Dockerをインストールした状態のチェインの流れを図示する(p60)

関連

なし。