docker 網(wǎng)絡(luò)-overlay

1、Overlay 能干什么(為了解決什么問(wèn)題),還有其他解決方案嗎?

為了解決跨主機(jī)容器直接通信,其他解決方案 contiv,weave,calico,kuryr, flannel。

2、Overlay 實(shí)現(xiàn)的基本原理是什么 ?

1、使用VXLAN 協(xié)議,VXLAN 可以 封裝 L2 L3 ,協(xié)議數(shù)據(jù),是一種隧道協(xié)議。如圖

overlay xvlan.png

2、docker 使用vxlan 封裝的網(wǎng)絡(luò)拓?fù)涫窃趺礃拥模?/p>

如下圖,使用 docker_gwbridge 進(jìn)行容器內(nèi)部通信,以及外部通信,
使用ovnet 進(jìn)行overlay 專有網(wǎng)段通信


docker_gwbridge ovnet.png

3、ovnet overlay network 結(jié)構(gòu)是怎么樣的?

如下圖


ovnet namespace.png

如果有多個(gè)overlay ,每個(gè)overlay 使用不同的 vxlan id 來(lái)標(biāo)識(shí),每個(gè)單獨(dú)的overlay 鏈接到 ovnet 命名空間中不同的 bridge 設(shè)備。通過(guò)bridge 設(shè)備轉(zhuǎn)發(fā)數(shù)據(jù)到vxlan 設(shè)備,vxlan 設(shè)備對(duì)數(shù)據(jù)進(jìn)行封裝(加vxlan header 等)后,轉(zhuǎn)發(fā)(arp proxy)數(shù)據(jù)到主機(jī)中,主機(jī)網(wǎng)絡(luò)將數(shù)據(jù)發(fā)出。

4、怎么查看ovnet 命名空間?

默認(rèn)使用 ip netns show 是看不到 ovnet 的命名空間,docker 的命名空間保存在 /var/run/docker/netns 這個(gè)目中,而 ip netns 的命名空間需要在/var/run/netns 這個(gè)目錄中,把 /var/run/docker/netns 軟連接到
/var/run/netns 中,“sudo ip netns ls” 可以看到 docker 的網(wǎng)絡(luò)命名空間了

5、vxlan 設(shè)備測(cè)試

.#vm1 192.168.99.106
sudo ip link add vxlan1 type vxlan id 1 remote 192.168.99.107 dstport 4799 dev eth1
#測(cè)試,路由未改變,udp 4799 端口未啟動(dòng)
ss -an |grep 4799
ip r
sudo ip link set vxlan1 up
#測(cè)試,路由未改變,udp 4799 端口已啟動(dòng)
ss -an |grep 4799
ip r
sudo ip addr add 10.0.3.3/24 dev vxlan1
#測(cè)試,路由已改變,udp 4799 端口已啟動(dòng)
ss -an |grep 4799
ip r
ping 10.0.3.123
#vm2 192.168.99.107
sudo ip link add vxlan1 type vxlan id 1 remote 192.168.99.106 dstport 4799 dev eth1
sudo ip link set vxlan1 up
sudo ip addr add 10.0.3.123/24 dev vxlan1
ping 10.0.3.3

6、Overlay 怎么用?

.#1、創(chuàng)建docker swarm 集群(前提條件)
docker-machine create --driver virtualbox m
docker-machine create --driver virtualbox s
ssh docker@192.168.99.106 -i ~/.docker/machine/machines/m/id_rsa
ssh docker@192.168.99.107 -i ~/.docker/machine/machines/s/id_rsa
# on m
# master service on 2377 port , tcp 2377 port for cluster
#management communications m is manager
docker swarm init --advertise-addr 192.168.99.106
# 2、
# docker_gwbridge 172.18.0.0/16
# ingress: 10.255.0.0/16
# bridge - docker0 172.17.0.0/16
docker network ls
# on s
# join swarm as a work node
docker swarm join --token xx 192.168.99.106:2377
# on m
docker network create -d overlay --attachable my-overlay-attach
# on s 不能看見(jiàn)my-overlay-attach
docker network ls
# on s 使用my-overlay-attach 創(chuàng)建容器后 , 使用docker network ls
#可以看見(jiàn)my-overlay-attach
docker run -itd --name s-c1 --net my-overlay-attach hub.c.163.com/library/busybox sh
#on m
docker run -itd --name m-c1 --net my-overlay-attach
hub.c.163.com/library/busybox sh
# on m
docker exec -it m-c1 ping s-c1
# on s
docker exec -it s-c1 ping m-c1

集群容器其他使用
1、使用 docker service 命名使用 overlay 網(wǎng)絡(luò) (略) 。
2、docker stack + docker-compse.yml 可以實(shí)現(xiàn)服務(wù)集群部署 。
3、 docker-compose + docker-compse.yml 只能實(shí)現(xiàn)主機(jī)部署。

7、總結(jié)

1、使用了 額外的重新組包拆包,所以性能有一定的影響。
2、可以方便的解決跨主機(jī)容器直接通信(需要注意容器網(wǎng)段的劃分)。

8、參考
vxlan-protocol-introduction
linux-vxlan
demystifying-docker-overlay-networking

相關(guān)內(nèi)容

docker 網(wǎng)絡(luò)-準(zhǔn)備
docker 網(wǎng)絡(luò)-host
docker 網(wǎng)絡(luò)-bridge
docker 網(wǎng)絡(luò)-overlay
docker 網(wǎng)絡(luò)-macvlan

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容