Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Docker Networking 詳解

Rueian
October 27, 2016

Docker Networking 詳解

介紹 Bridge Driver、Host Driver、Macvlan Driver、還有 Swarm Overlay Network 如何運作

Rueian

October 27, 2016
Tweet

More Decks by Rueian

Other Decks in Technology

Transcript

  1. Bridge Driver • 預設 bridge driver 在創建網路路的時候會在 linux 上⾯面開⼀一張 interface,可能叫做

    br-xxxx,並利利⽤用 iptables NAT 連接外網。 • 當有容器加入該網路路的時候,docker 會為該容器創建⼀一個 linux network namespaces,然後再創建⼀一對互相連接的 veth peer,將其中⼀一個 veth 放置於該 namespace 底下,另外⼀一個 veth 則與 br-xxxx 做 bridge。如此⼀一來來就完成容器的網路路設 定。 • 若若容器有指定 -p 對外開放 port 的話,則是透過 iptables 做 DNAT 達成。
  2. 關於 Network Namespace & veth pair Network Namespace 可以創建出
 ⼀一個虛擬化的網路路環境。


    Namespace 透過 veth peer 與外界連接。 圖片出處:http://www.slideshare.net/zuan0312/linux-network-namespace
  3. Host Driver • host network 不會創建 netwrok namespace,也不 會創 veth

    pair,⽽而是直接使⽤用 host 的 network stack • docker run --net=host busybox ifconfig 可以發現輸 出跟直接在 host 下 ifconfig ⼀一模⼀一樣。
  4. Macvlan Driver • 當 docker 需要接入外⾯面 802.1Q vlan 的時候,要⽤用 macvlan

    driver。 • docker network create -d macvlan 
 --subnet=192.168.50.0/24 
 --gateway=192.168.50.1 
 -o parent=eth0.50 macvlan50 • 需要指定 vlan 對應的 subnet 以及 gateway 還有 parent 的 interface, 利利如 eth0.50 • 如果 docker 找不到 parent interface,則會⾃自動創建。
 若若要⾃自⼰己創則: ip link add link eth0 name eth0.50 type vlan id 50
 不過 docker 可以⾃自動管理理這些 sub interface,就算重開機後 docker 也 可以把這些 interface ⾃自動創建回來來。
  5. Overlay in Swarm • Overlay network 由 data plane 跟

    control plane 組 成。 data plane 負責傳送資料,control plane 負責 保存傳遞 routing 跟 service discovery 訊息。 • 在 docker swarm 中,data plane 封包傳遞採⽤用 vxlan 格式包裝,還可以再套⼀一層 IPSec tunnel 加 密。control plane 採⽤用 Gossip based protocol,使 ⽤用 AES 加密,每⼗十⼆二⼩小時會換 key,且⽤用 decentralize store 保存資訊。
  6. Networking in Swarm • swarm 模式開啟時, docker 會先創建⼀一個 docker_gwbridge bridge

    network,透過 iptables 做 NAT,作為對外的 gateway,跟 docker0 ⼀一樣。 • 除此之外還會創建⼀一個 ingress overlay network,以及 ⼀一個 ingress sbox namespace。所有的 swarm service container 都會加入 ingress overlay network。
 ⽽而這個 ingress sbox 將會透過 ingress overlay network 完成 docker swarm 的 port-publish, routing mesh, loadbalancing 功能。
  7. Networking in Swarm • docker service create --replicas 1 \


    -p 8080:80 \
 --network my-overlay \
 nginx • port-publish:
 docker 會將所有 node 的 8080 port 透過 iptables DNAT 設定把流 量量導入各⾃自的 ingress sbox。 • routing mesh + ingress loadbalancing:
 流量量進入 ingress sbox 之後會透過 iptables 打上對應的 firewall mark 再交給 IPVS 去根據 mark 找到 nginx 在 ingress overlay network 的 ip 列列表然後做 RR loadbalancing。
  8. Networking in Swarm • 若若想要在 swarm 裡⾯面直接連接內部服務,必須他們 加入同⼀一個非 ingress 的

    overlay 網路路。 • 在同⼀一個 overlay 網路路的 container 可以透過 service name 去跟 embedded DNS 查詢 VIP 再透過 iptables 打上 mark 再交給 IPVS 根據 mark 去 RR 存 取服務。
  9. 參參考 • Docker 1.12 networking deep dive • 簡介 Linux

    的 Network Namespace 功能 • Docker libnetwork design • https://github.com/docker/libnetwork/blob/master/docs/macvlan.md • overlay網路路技術之VXLAN詳解 • IPVS 百度 • Swarm mode overview • Understand Docker container networks • https://docs.docker.com/v1.8/articles/networking/