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

Docker Networking 詳解

E91a24de5f8858932171b35bd47c8485?s=47 Rueian
October 27, 2016

Docker Networking 詳解

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

E91a24de5f8858932171b35bd47c8485?s=128

Rueian

October 27, 2016
Tweet

Transcript

  1. Docker Networking Rueian docker engine 1.12

  2. 內建的 Driver • null • bridge • host • macvlan

    • overlay in swarm
  3. 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 達成。
  4. 關於 Network Namespace & veth pair Network Namespace 可以創建出
 ⼀一個虛擬化的網路路環境。


    Namespace 透過 veth peer 與外界連接。 圖片出處:http://www.slideshare.net/zuan0312/linux-network-namespace
  5. 預設的 docker0 就是 bridge 圖片來來源:http://www.slideshare.net/MadhuVenugopal2/docker-112-networking-deep-dive

  6. 試試⼿手動將容器加入 docker0

  7. 試試⼿手動將容器加入 docker0

  8. 試試⼿手動將容器加入 docker0 圖片來來源:https://docs.docker.com/v1.8/articles/networking/

  9. Host Driver • host network 不會創建 netwrok namespace,也不 會創 veth

    pair,⽽而是直接使⽤用 host 的 network stack • docker run --net=host busybox ifconfig 可以發現輸 出跟直接在 host 下 ifconfig ⼀一模⼀一樣。
  10. 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 ⾃自動創建回來來。
  11. Macvlan Driver 圖片來來源:https://github.com/docker/libnetwork/blob/master/docs/macvlan.md 將三個容器個別加入到三個 vlan

  12. 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 保存資訊。
  13. 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 功能。
  14. 圖片來來源:http://www.slideshare.net/MadhuVenugopal2/docker-112-networking-deep-dive

  15. 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。
  16. 圖片來來源:http://www.slideshare.net/MadhuVenugopal2/docker-112-networking-deep-dive

  17. Networking in Swarm • 若若想要在 swarm 裡⾯面直接連接內部服務,必須他們 加入同⼀一個非 ingress 的

    overlay 網路路。 • 在同⼀一個 overlay 網路路的 container 可以透過 service name 去跟 embedded DNS 查詢 VIP 再透過 iptables 打上 mark 再交給 IPVS 根據 mark 去 RR 存 取服務。
  18. 圖片來來源:http://www.slideshare.net/MadhuVenugopal2/docker-112-networking-deep-dive

  19. 參參考 • 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/