DockerSwarm里集群服务间通信

Routing Mesh


Routing Mesh 是集群服务之间的通讯技术主要包括2方面Internal和Ingress

Internal

Container 和Container 之间的访问通过overlay网络,而service和service之间的通讯是通过VIP(虚拟IP)实现的。
主要意义是Internal Load Balancing 实现

在这里插入图片描述
下面是对Internal的小实验
*ps. 提前整理一个后面要用到的小命令【nslookup】它用于查询DNS的记录,查询域名解析是否正常,在网络故障时用来诊断网络问题。
但是一些linux系统下默认无此命令,可以通过安装一个包来使该命令生效,这个包中也包括dig命令。

yum -y install bind-utils

例如:
nslookup mp.csdn.net 查询网站的dns name 以及后面对应的ip地址
返回:
Service:100.100.2.136 (dns名)
Name: mp.csdn.net
Address : 101.201.178.55 (虚拟ip)
nslookup tasks.mp.csdn.net 可以看到背后容器真正的IP地址

步骤解析Internal Load Balancing:

  1. 创建overlay的network

    docker network create -d overlay demo-net
    
  2. 创建一个service, 使用whoami,可返回当前访问的主机名称

    docker service create --name whoami -p 8000:8000 --network demo-net jwilder/whoami
    
  3. 拓展whoami服务为3个

    docker service scale whoami=5
    
  4. 在不同容器里nslookup whoami 显示的是同一个ip地址,而在每个容器里 ip a 可分别看到每个eth0 和nslookup whoami 出的 Address都类似但是不一样。

  5. 在Manager节点上 nslookup tasks.whoami (可展示背后容器真正的IP地址)可以看到5个容器里eth0 地址,都出现并对应上了。
    ps. 实际上:
    eth0 连接的是一个 overlay 类型的网络,名字为 ingress,其作用是让运行在不同主机上的容器可以相互通信。

    eth1 连接的是一个 bridge 类型的网络,名字为 docker_gwbridge,其作用是让容器能够访问到外网。

所以可以看出是有一个虚拟IP在接收对外的请求,而 VIP(虚拟IP)映射到容器里的IP是通过LVS(Linux 虚拟服务器),再通过overlay网络自动的负载到每个服务所有的健康任务上。具体实现如图:
在这里插入图片描述

Ingress

如果服务有绑定接口,则此服务可以通过任意swarm节点的响应接口访问。
具体现象:假如一个集群里有3个节点,将一个服务scale到了其中2个节点,但没部署的剩余一个节点(也可以说任意节点)通过部署时设置的端口都访问到服务。

实际上是Ingress Network 的作用,当去任何一台swarm节点上访问端口服务的时候,会通过本地的IPVS通过LVS把服务给 load balance 到真正具有service的swarm节点上。如图:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值