Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Docker Networking 詳解
Search
Rueian
October 27, 2016
Technology
0
280
Docker Networking 詳解
介紹 Bridge Driver、Host Driver、Macvlan Driver、還有 Swarm Overlay Network 如何運作
Rueian
October 27, 2016
Tweet
Share
More Decks by Rueian
See All by Rueian
DDIA Chapter 9 Notes
rueian
0
310
Cilium's Envoy Filter and VS Bridge to Kubernetes
rueian
0
1.6k
Cilium & cgroup eBPF
rueian
0
1.4k
Golang PostgreSQL Libraries Comparison With Wireshark
rueian
0
1.3k
Scaling Offline Database Usage on GCP @ Dcard
rueian
1
770
Other Decks in Technology
See All in Technology
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
460
ZOZOマッチのアーキテクチャと技術構成
zozotech
PRO
4
1.5k
職種の壁を溶かして開発サイクルを高速に回す~情報透明性と職種越境から考えるAIフレンドリーな職種間連携~
daitasu
0
160
Snowflake Intelligenceにはこうやって立ち向かう!クラシルが考えるAI Readyなデータ基盤と活用のためのDataOps
gappy50
0
210
Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか
iwatatomoya
1
960
TS-S205_昨年対比2倍以上の機能追加を実現するデータ基盤プロジェクトでのAI活用について
kaz3284
1
130
CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?
smt7174
4
170
AIエージェント開発用SDKとローカルLLMをLINE Botと組み合わせてみた / LINEを使ったLT大会 #14
you
PRO
0
120
AI開発ツールCreateがAnythingになったよ
tendasato
0
130
Generative AI Japan 第一回生成AI実践研究会「AI駆動開発の現在地──ブレイクスルーの鍵を握るのはデータ領域」
shisyu_gaku
0
170
Webブラウザ向け動画配信プレイヤーの 大規模リプレイスから得た知見と学び
yud0uhu
0
230
DDD集約とサービスコンテキスト境界との関係性
pandayumi
3
280
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.2k
Writing Fast Ruby
sferik
628
62k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Building an army of robots
kneath
306
46k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Designing for Performance
lara
610
69k
Producing Creativity
orderedlist
PRO
347
40k
Making Projects Easy
brettharned
117
6.4k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Transcript
Docker Networking Rueian docker engine 1.12
內建的 Driver • null • bridge • host • macvlan
• overlay in swarm
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 達成。
關於 Network Namespace & veth pair Network Namespace 可以創建出 ⼀一個虛擬化的網路路環境。
Namespace 透過 veth peer 與外界連接。 圖片出處:http://www.slideshare.net/zuan0312/linux-network-namespace
預設的 docker0 就是 bridge 圖片來來源:http://www.slideshare.net/MadhuVenugopal2/docker-112-networking-deep-dive
試試⼿手動將容器加入 docker0
試試⼿手動將容器加入 docker0
試試⼿手動將容器加入 docker0 圖片來來源:https://docs.docker.com/v1.8/articles/networking/
Host Driver • host network 不會創建 netwrok namespace,也不 會創 veth
pair,⽽而是直接使⽤用 host 的 network stack • docker run --net=host busybox ifconfig 可以發現輸 出跟直接在 host 下 ifconfig ⼀一模⼀一樣。
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 ⾃自動創建回來來。
Macvlan Driver 圖片來來源:https://github.com/docker/libnetwork/blob/master/docs/macvlan.md 將三個容器個別加入到三個 vlan
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 保存資訊。
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 功能。
圖片來來源:http://www.slideshare.net/MadhuVenugopal2/docker-112-networking-deep-dive
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。
圖片來來源:http://www.slideshare.net/MadhuVenugopal2/docker-112-networking-deep-dive
Networking in Swarm • 若若想要在 swarm 裡⾯面直接連接內部服務,必須他們 加入同⼀一個非 ingress 的
overlay 網路路。 • 在同⼀一個 overlay 網路路的 container 可以透過 service name 去跟 embedded DNS 查詢 VIP 再透過 iptables 打上 mark 再交給 IPVS 根據 mark 去 RR 存 取服務。
圖片來來源:http://www.slideshare.net/MadhuVenugopal2/docker-112-networking-deep-dive
參參考 • 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/