docker 网络-overlay

1、Overlay 能干什么(为了解决什么问题),还有其他解决方案吗?

为了解决跨主机容器直接通信,其他解决方案 contiv,weave,calico,kuryr, flannel。

2、Overlay 实现的基本原理是什么 ?

1、使用VXLAN 协议,VXLAN 可以 封装 L2 L3 ,协议数据,是一种隧道协议。如图

docker 网络-overlay_第1张图片
overlay xvlan.png

2、docker 使用vxlan 封装的网络拓扑是怎么样的?

如下图,使用 docker_gwbridge 进行容器内部通信,以及外部通信,
使用ovnet 进行overlay 专有网段通信


docker 网络-overlay_第2张图片
docker_gwbridge ovnet.png

3、ovnet overlay network 结构是怎么样的?

如下图


docker 网络-overlay_第3张图片
ovnet namespace.png

如果有多个overlay ,每个overlay 使用不同的 vxlan id 来标识,每个单独的overlay 链接到 ovnet 命名空间中不同的 bridge 设备。通过bridge 设备转发数据到vxlan 设备,vxlan 设备对数据进行封装(加vxlan header 等)后,转发(arp proxy)数据到主机中,主机网络将数据发出。

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

默认使用 ip netns show 是看不到 ovnet 的命名空间,docker 的命名空间保存在 /var/run/docker/netns 这个目中,而 ip netns 的命名空间需要在/var/run/netns 这个目录中,把 /var/run/docker/netns 软连接到
/var/run/netns 中,“sudo ip netns ls” 可以看到 docker 的网络命名空间了

5、vxlan 设备测试

.#vm1 192.168.99.106
sudo ip link add vxlan1 type vxlan id 1 remote 192.168.99.107 dstport 4799 dev eth1
#测试,路由未改变,udp 4799 端口未启动
ss -an |grep 4799
ip r
sudo ip link set vxlan1 up
#测试,路由未改变,udp 4799 端口已启动
ss -an |grep 4799
ip r
sudo ip addr add 10.0.3.3/24 dev vxlan1
#测试,路由已改变,udp 4799 端口已启动
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、创建docker swarm 集群(前提条件)
docker-machine create --driver virtualbox m
docker-machine create --driver virtualbox s
ssh [email protected] -i ~/.docker/machine/machines/m/id_rsa
ssh [email protected] -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 不能看见my-overlay-attach
docker network ls
# on s 使用my-overlay-attach 创建容器后 , 使用docker network ls
#可以看见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 网络 (略) 。
2、docker stack + docker-compse.yml 可以实现服务集群部署 。
3、 docker-compose + docker-compse.yml 只能实现主机部署。

7、总结

1、使用了 额外的重新组包拆包,所以性能有一定的影响。
2、可以方便的解决跨主机容器直接通信(需要注意容器网段的划分)。

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

相关内容

docker 网络-准备
docker 网络-host
docker 网络-bridge
docker 网络-overlay
docker 网络-macvlan

你可能感兴趣的:(docker 网络-overlay)