Flannel跨主机互联概述及容器网络拓扑图

当您将多台服务器节点组成一个Docker集群时,须要对集群网络进行设置,不然默认状况下,没法跨主机容器互联,接下来咱们首先分析一下缘由。docker

跨主机容器互联

下图描述了一个简单的集群网络,在该集群内,有两台服务器甲和乙,每台服务器上都有两张网卡,分别链接公网和私网,两台服务器能够经过私网互联,在两个服务器节点上分别安装了Docker,而且运行了A/B/C/D 4个容器。服务器

每台服务器节点上都有一个 docker0 网桥,这是docker启动后初始化的虚拟设备,每一个容器都与docker0网桥链接,而且,容器的IP由docker自动分配。网络

可是这个默认状况下的网络设置不支持跨主机的容器互联,缘由有两方面。性能

一,跨主机访问容器,没有有效路由阿里云

好比,容器A要访问容器D,请求的地址为 192.168.1.4 ,可是主机甲并不知道该将这个IP发送到那个网络设备上,主机甲也不知道主机乙内部有个容器D。spa

二,多个节点上的容器网段冲突code

默认状况下,docker启动后初始化 docker0 网桥时,会随机分配一个IP段,那么,若是不加以协调,多个节点内的容器网络有可能会冲突,好比上图中两个网络都采用了 192.168.1.1/24 网段,在这种状况下,就会致使容器IP冲突,好比 B 和 C。blog

那么,只须要解决这两个问题,咱们就能够实现跨主机的容器互联。路由

脉冲云集群网络设置

使用脉冲云能够很是轻易地完成集群网络设置。在增长集群时,只须要将集群的网络类型设置为Flannel便可。文档

Flannel 是一个专门用于容器网络互联的软件,脉冲云会自动地在您的服务器节点上部署Flannel实现容器互联。

设置Flannel时,能够指定容器局域网段和子网掩码,如上图所示,若是选择局域网段为 172.16.0.0/12 子网掩码为 255.255.240.0 那么,在整个集群网络中,就能够分配256个子网,IP段分别为172.16.0.0/20、 172.16.16.0/20、 172.16.32.0/20 等等,每一个子网中能够再分配 4096 个IP。每一个节点的 docker0 网桥使用一个子网,每一个容器使用一个子网内的IP,那么咱们就能够组成下图中所示网络。

图中,主机甲的docker被分配到了 172.16.0.1/20 子网,主机已的docker被分配到了172.16.16.1/20 子网,两个子网都处在一个由Flannel管理的虚拟网络 172.16.0.0/12 中,图中以虚线表明。

到此,在Flannel的协调下,各个主机上的Docker子网IP就不会再冲突了,另外,Flannel会维护容器网络的路由规则,容器A就能够经过172.16.16.3访问容器D了,也就实现了跨主机容器互联。

Flannel维护的容器网络是一个虚拟网络,在图中的虚线也是为了抽象理解,若是你对Flannel的实现方式感兴趣,能够继续查阅Flannel的官方文档。

一些说明

  • 上文中为了简化方便理解,网桥IP和子网IP段没有分开说明,在上图中,主机甲所分配的子网网段是 172.16.0.0/20 ,网段中的第一个IP 172.16.0.1 ,用做网桥设备的IP。
  • 因为一个网段中第一个IP用做网桥设备IP,最后一个IP用做广播IP,因此在一个子网中,理论上能够分配 4096 个IP,可是实际上只有 4094 个IP可用。
  • 在设置脉冲云集群网络时,选择的集群网段请勿与已经存在的网络冲突,好比目标集群已经存在了 10.0.0.0/8 网络,那么请选择 172.16.0.0/12 或 192.168.0.0/16 做为容器网络。

组网IP

在上文Flannel网络的示意图中,有三个网络,公网 0.0.0.0/0 ,私网 10.0.0.0/8 和虚拟的容器网络 172.16.0.0/12 ,强调容器网络是虚拟网络 缘由是,这个网络上的数据必须以其余网络为载体,这个网络是一个二级网络。

好比,主机甲上的容器A给主机乙上的容器D发送数据,数据会被路由到 docker0 网桥上,而后数据会被Flannel经过主机甲的真实网卡,发送到主机乙的网卡上,主机乙上运行的Flannel,继续将数据转发到主机乙的docker0 网桥上,最后到达容器D。

那么若是主机有多张网卡,就像图中那样,有两张网卡分别链接公网和私网,那么咱们须要为Flannel指定一个网卡/IP用以发送数据,这个IP,咱们称为 组网IP。即告诉主机甲上运行的Flannel,使用哪一个网卡/IP 去寻找主机乙。

使用脉冲云组建的集群,会默认使用节点的公网IP做为组网IP。那么,多个节点之间的数据通讯会被发送到公网之上,除非是跨机房互联,通常状况下,咱们但愿节点间经过内网传输数据,以提升性能,或下降费用。

将主机添加到集群后,在主机设置页面,选择组网IP便可指定各个主机节点分别使用的组网IP。

NAT设备后的集群

NAT,即网络地址转换,经常使用的路由器就是NAT设备,在有NAT设备的网络拓扑中,局域网内的主机只有内网IP,没有公网IP,网络以下所示:

在这种网络模型下,各个服务器节点主机都经过路由器 8.8.8.8 链接脉冲云,因此脉冲云只能获取到各个服务器的公网IP为 8.8.8.8 ,按上文所述,脉冲云会默认使用公网IP 8.8.8.8 做为Flannel的组网IP,在这种状况下,会致使Flannel组网失败,甚至Flannel会没法启动,由于主机上并不存在一个IP为 8.8.8.8 的网卡。

为解决这种问题,只须要手动设置每个节点的组网IP便可。

某些云服务商的主机也是在NAT设备以后的,好比阿里云服务器,若是使用了阿里云的VPC网络,即便给服务器绑定了公网IP 8.8.8.8,可是从主机上看,并无绑定公网IP的网卡设备,只有一个内网网卡,缘由就是有NAT设备存在。这种状况下,也须要指定内网IP为组网IP。

相关文章
相关标签/搜索