美文网首页
docker 网络-overlay

docker 网络-overlay

作者: 不一样的卡梅利多 | 来源:发表于2019-08-07 18:41 被阅读0次

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

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

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

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

    overlay xvlan.png

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

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


    docker_gwbridge ovnet.png

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

    如下图


    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 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 不能看见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

          本文链接:https://www.haomeiwen.com/subject/trnwdctx.html