Page 37 - 网络电信2022年7/8月刊
P. 37

把容器之间的请求封装成VXLAN的请求,将链路层的以太网包封                        图4 分布式微服务系统的跨主机通信案例架构
            装到UDP包中进行传输。首先举个例子,从C1去访问宿主机上C2
            的容器,先通过C1发出这个包之后,它首先进行封包,要查找
            中心化存储C2是在哪个主机上的,查到的是这个主机上,就把
            这个请求的包封装成宿主机之间的包,把这个包送达到对应宿
            主机上,再通过一定的约定去解包,最终转发到另外一个主机
            上的一个容器。其缺点是对带宽的损耗比较大,因为看到这里
            去封包,它肯定是把这个容器的包上面又加了一层包,这个包
            上面肯定会有一些自己的占用,一般像封包模式,MTU最终都会
            小于宿主机之间的MTU,它还会造成一些资源占用。比如说在这
            个地方去封包的时候,它可能会占用CPU去做一下封包操作,还
            会占用CPU去做解包的操作,所以会增加主机上的负载,但是它
            的好处是对基础设施要求比较低,它只需要两个宿主机之间可
            以三层互通。
                Docker的overlay驱动也是封包模式的实现,它的封包方                  口到物理网络,因为物理网络10.159.62.0/24 无法直接访问
            式是基于VXLAN。VXLAN内部把一个二层的包、链路层的一个请                         ■ overlay网络中的容器,需要容器中映射端口到物理网络。
            求封装成一个VXLAN的一个包,这里面会有一个约定的信息,比                           ■  noverlay网络中的容器默认通过与主机之间的bridge访
            如VXLAN  ID,还有一个外部的UDP的头,最终会把这个包通过                    问物理网络。
            UDP发往对应的主机上面去,对应的主机再做VXLINE的解包。                          2.开放Docker Swarm 集群所需的主机端口
            Docker还会做IP的地址管理和网络信息同步。                                 Swarm集群的成员主机都需要开放集群所需的主机端口:
                2.路由模式                                               firewall-cmd  --zone=public  --add-port=2377/tcp
                举例来说,主机1上的容器想要访问主机2的容器,首先这                       --perma-nent
            个机器上是没有主机2的IP地址,它出了机器之后到达路由器,                            firewall-cmd  --zone=public  --add-port=7946/tcp
            再通过路由器上的路由表,去把对应的请求网端转发到对应的                          --perma-nent
            主机2上面,主机2上面是有这个容器的IP,所以它就能够做到                            firewall-cmd  --zone=public  --add-port=7946/udp
            这个容器的跨主机通信。它的好处在于它没有封包,所以它的                          --perma-nent
            性能很好,但是它对于基础设施有一些要求,比如我的基础设                              firewall-cmd  --zone=public  --add-port=4789/tcp
            施要支持、能够配置这个路由表,如果用Linux路由要支持二层                       --perma-nent
            的转发。                                                     firewall-cmd  --zone=public  --add-port=4789/udp
                3.两种模式优缺点比较                                      --perma-nent
                总的来说,二层VLAN网络需要二层网络设备支持,通用性                          firewall-cmd –reload
            和灵活性不如Overlay网络。相比之下,Overlay网络在不改变                       3.创建Docker Swarm 集群
            现有网络基础设施的前提下,通过某种约定通信协议,把二层                              Docker  Swarm是Docker开源组织提供的Docker环境集群管
            报文封装在IP报文之上的新的数据格式。能够充分利用成熟的                         理工具,它能够把若干台Docker主机的抽象为一个逻辑上的主
            IP路由协议进程数据分发,突破VLAN的数量限制,并可将广播                       机,它也是一种用于统一管理Docker主机的CLI工具,可用来控
            流量转化为组播流量,避免广播数据泛滥。因此,Over  lay网                     制Docker主机。Swarm调用的是Docker  API标准接口,兼容非集
            络实际上是目前最适合的Docker容器跨节点通信方案。                          群模式的操作指令,比如通过常规的docker运行命令来启动容
                                                                 器,Swarm会自动选择适合的主机来运行相关容器。也就是说,
                四.分布式微服务架构系统的跨主机网络通                              像Compose编排脚本可以在不经任何改动的情况下,直接通过
            信解决方案与实施                                             Swarm来实现对集群的管理。
                1.案例说明                                               创建Docker Swarm集群命令:
                ■  如图所示,假设本地局域网段10.159.62.0/24中存在主                   docker swarm init --advertise-addr <MANAGER-IP>
            机159.62.231,10.159.62.232和10.159.62.233互联互通;             将其他Docker主机节点加入Swarm集群中:
                ■  每个主机上都运行Docker引擎,通过Docker运行若干个                    docker swarm join \
            Docker容器,例如图中的Order,Billing等;                            --token  SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0
                ■ 将这3台主机建立成为一个Docker Swarm集群;                    xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
                ■ 创建一个Docker Overlay网络(网段10.10.0.0/24),              192.168.99.100:2377
            每个主机上的容器都被加入该overlay网络中,通过overlay网                       查看集群所有服务器节点:
            络实现跨主机的容器相互通信;                                           docker node ls
                ■  假设Console,Terminal和API这三个服务均需要暴露端                 至此,Docker Swarm集群创建完毕。

                                                      网络电信 二零二二年七,八月                                           65
   32   33   34   35   36   37   38   39   40   41   42