当前位置:网站首页>9.集群之间服务通信 RoutingMesh

9.集群之间服务通信 RoutingMesh

2020-11-07 16:43:00 太猪-YJ

创建overlay网关

docker network create -d overlay demo

docker network ls
NETWORK ID          NAME                  DRIVER              SCOPE
7a511becede2        bridge                bridge              local
im7c34k0bfxh        demo                  overlay             swarm
37856c9de79d        docker_gwbridge       bridge              local
c438996bf1e8        host                  host                local
idnr3c47eum5        ingress               overlay             swarm
a785589db128        lb-scale_default      bridge              local
14865f2115c6        none                  null                local
e9bba04074f1        wordpress_my-bridge   bridge              local

创建Service使用network为overlay

 

如上图所示,我们有三个应用,两个service一个client。它们可能部署在同一个worker node上,也可能分开部署。上图中这三个应用,同时部署在了127.0.0.11这个节点上。client想要访问service应用,可以通过ip+端口号的形式,也可以通过应用名称来访问。是怎么做到的呢?docker engine里有一个DNS服务,它整理了所有应用的名称与IP地址映射关系,但是Docker DNS服务里的生成和存储的IP地址,不是应用所在容器的IP地址,应用都是部署在127.0.0.11节点上的,但是我们看到DNS里存储的ip地址是10.0.3/4/5,这是虚拟IP,VIP。因为部署应用的容器地址因为宕机或者扩容而变化,DNS给应用分配一个虚拟IP,这个虚拟IP是不会变的。这样应用通过虚拟IP互相访问,再通过LVS去实现的。

nslookup www.baidu.com/service name

可以查看域名对应的ip地址,如果域名做了集群部署,是负载均衡的,也会显示多个ip地址。

1.我们在容器中部署应用的时候,需要给应用指定network,network必须是overlay网络协议,这样子swarm的DNS才会使用vip来互相通信。

2.如果部署的应用绑定了接口,即使它部署在某一个节点上,也可以通过访问swarm里的其他节点的此端口号,来访问到应用。

 

版权声明
本文为[太猪-YJ]所创,转载请带上原文链接,感谢
https://my.oschina.net/xiaoyoung/blog/4706937