Docker中的覆盖网络和桥接网络有什么区别?

24

既然叠加网络可以使多个隔离的Docker守护程序主机彼此通信,那么为什么我们需要Docker Swarm中的桥接网络?谢谢!

2个回答

15

查看这个线程以从概念上理解。

桥接网络:桥接网络是docker中的默认网络,也称为docker0。它是连接到您主机的物理网络的NAT防火墙的默认网络。但是,我们不必关心它,因为所有容器都将附加到此网络并正常工作。

如果您有任何正在运行的容器,可以检查桥接网络如下:

$ docker network inspect bridge

"Containers": {
        "145a2716d018c6fe8e9f93a81d88afd5a7437f0084ddb170c40761818e6d2f67": {
            "Name": "nginx",
            "EndpointID":   "ea6cfa433f41e21e572f17473c8e5f5e5d82e9f19646e66fe23abda20a3836b8",
            "MacAddress": "02:42:ac:11:00:02",
            "IPv4Address": "172.17.0.2/16",
            "IPv6Address": ""
        }
    },
注意:您可以看到自动分配给容器的IP地址来自IPAM配置子网。
假设您有多个运行容器的Docker主机,每个Docker主机都有自己的内部私有桥接网络,允许容器彼此通信。然而,在不发布这些容器上的端口并自行设置某种路由的情况下,跨主机的容器无法相互通信。这就是覆盖网络发挥作用的地方。使用Docker Swarm,可以创建一个跨越参与Swarm网络的所有节点的内部私有网络。我们可以在创建服务时使用网络选项将容器或服务附加到此网络,从而实现跨节点的容器之间通过此覆盖网络进行通信。
$ docker network create --driver overlay --subnet 10.0.9.0/24 overlay_network
$ docker service create --replicas 3 --network overlay_network nginx
希望这能帮到你。


3

覆盖页面中详细介绍了:

当您初始化一个Swarm或将Docker主机加入到现有的Swarm中时,会在该Docker主机上创建两个新网络:

  • 名为ingress的覆盖网络,用于处理与Swarm服务相关的控制和数据流量。当您创建Swarm服务并未将其连接到用户定义的覆盖网络时,默认情况下将其连接到ingress网络。
  • 名为docker_gwbridge的桥接网络,将单个Docker守护程序连接到参与Swarm的其他守护程序。

请参见它是如何工作的?Docker!第2部分:Swarm网络,作者为Sebastian Caceres

叠加桥是VXLAN封装的叠加网络的进入/出口点。它还将覆盖层扩展到参与此特定覆盖层的所有主机上。每个主机上每个覆盖子网都有一个具有与覆盖网络相同名称的叠加桥。
docker_gwbridge是离开集群的所有流量的出口桥。每个主机只有一个docker_gwbridge。容器之间的流量不通过此桥。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接