博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
docker(十八):集群服务间通信
阅读量:4280 次
发布时间:2019-05-27

本文共 7236 字,大约阅读时间需要 24 分钟。

一、    DNS服务发现

1.    实现功能

在同一个overlay网络network下,在swarm集群上面启动docker service服务,docker引擎会自动创建一个DNS服务。使每一个服务对应一个虚拟IP,此时通过docker服务名即可以访问该服务。无论该服务今后如何拓展,虚拟网络ip是不会变化的。

2.发现服务框架

 
二、实例

1.创建demo的overlay网络

docker network create -d overlay demo

2.创建whoami服务

[vagrant@swarm-manager ~]$ docker service create --name whoami -p 8000:8000 -d --network demo jwilder/whoamiknns4nhln5ten8cvnxmwcg868

3.查看whoami服务启动状态

(1)查看启动服务

[vagrant@swarm-manager ~]$ docker service lsID                  NAME                MODE                REPLICAS            IMAGE                   PORTSqwr4cuyrr86a        client              replicated          1/1                 busybox:latestknns4nhln5te        whoami              replicated          1/1                 jwilder/whoami:latest   *:8000->8000/tcp

(2)查看运行地点

[vagrant@swarm-manager ~]$ docker service ps whoamiID                  NAME                IMAGE                   NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTSdamei4u1ihx7        whoami.1            jwilder/whoami:latest   swarm-worker2       Running             Running 45 seconds ago

(3)查看whoami服务运行的worker2节点,服务运行状态

[vagrant@swarm-worker2 ~]$ docker psCONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS               NAMES31b30e072daa        jwilder/whoami:latest   "/app/http"         2 minutes ago       Up 2 minutes        8000/tcp            whoami.1.damei4u1ihx7hgrg7rufievaf[vagrant@swarm-worker2 ~]$ curl 127.0.0.1:8000I'm 31b30e072daa

4.创建busy box客户端service服务

vagrant@swarm-manager ~]$ docker service create --name client -d --network demo busybox sh -c "while true; do sleep 3600; done"qwr4cuyrr86avmgq6q8xp18ig

5.查看busybox服务service信息

 (1)查看整体状态

[vagrant@swarm-manager ~]$ docker service lsID                  NAME                MODE                REPLICAS            IMAGE                   PORTSqwr4cuyrr86a        client              replicated          1/1                 busybox:latestknns4nhln5te        whoami              replicated          1/1                 jwilder/whoami:latest   *:8000->8000/tcp[vagrant@swarm-[vagrant@swarm-manager ~]$ docker service ps clientID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTSywnrazvemzij        client.1            busybox:latest      swarm-worker1       Running             Running 7 minutes ago

(2)进入worker1查看运行进程

[vagrant@swarm-worker1 ~]$ docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES5e41a868d69d        busybox:latest      "sh -c 'while true; …"   9 minutes ago       Up 9 minutes                            client.1.ywnrazvemzijjch7ust01tf34

(3)进入busybox,运行shell

[vagrant@swarm-worker1 ~]$ docker exec -it 5e41a sh/ # 

(4)ping whoami

[vagrant@swarm-worker1 ~]$ docker exec -it 5e41a sh/ # ping whoamiPING whoami (10.0.0.11): 56 data bytes64 bytes from 10.0.0.11: seq=0 ttl=64 time=0.237 ms64 bytes from 10.0.0.11: seq=1 ttl=64 time=0.096 ms64 bytes from 10.0.0.11: seq=2 ttl=64 time=0.074 ms64 bytes from 10.0.0.11: seq=3 ttl=64 time=0.071 ms^C--- whoami ping statistics ---4 packets transmitted, 4 packets received, 0% packet lossround-trip min/avg/max = 0.071/0.119/0.237 ms/ #

(5)但是这个10.0.0.11地址不是whoami所在容器的真实地址!

三、虚拟ip概念(10.0.0.11)

1.扩展whoami为两个服务

[vagrant@swarm-manager ~]$ docker service scale whoami=2whoami scaled to 2overall progress: 2 out of 2 tasks1/2: running2/2: runningverify: Service converged

2.查看whoami服务

(1)总体详细状态

[vagrant@swarm-manager ~]$ docker service ps whoamiID                  NAME                IMAGE                   NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTSdamei4u1ihx7        whoami.1            jwilder/whoami:latest   swarm-worker2       Running             Running 10 minutes agovus1yw9b4i51        whoami.2            jwilder/whoami:latest   swarm-manager       Running             Running 52 seconds ago

(2)进入manager查看进程

[vagrant@swarm-manager ~]$ docker psCONTAINER ID        IMAGE                   COMMAND             CREATED              STATUS              PORTS               NAMESd780c8fa2031        jwilder/whoami:latest   "/app/http"         About a minute ago   Up About a minute   8000/tcp            whoami.2.vus1yw9b4i519crs3h1zi48ln

(3)回到busybox的内容部接着ping whoami,whoami地址不变

[vagrant@swarm-worker1 ~]$ docker exec -it 5e41a sh/ # ping whoamiPING whoami (10.0.0.11): 56 data bytes64 bytes from 10.0.0.11: seq=0 ttl=64 time=0.237 ms64 bytes from 10.0.0.11: seq=1 ttl=64 time=0.096 ms64 bytes from 10.0.0.11: seq=2 ttl=64 time=0.074 ms64 bytes from 10.0.0.11: seq=3 ttl=64 time=0.071 ms^C--- whoami ping statistics ---4 packets transmitted, 4 packets received, 0% packet lossround-trip min/avg/max = 0.071/0.119/0.237 ms/ # ping whoamiPING whoami (10.0.0.11): 56 data bytes64 bytes from 10.0.0.11: seq=0 ttl=64 time=0.056 ms64 bytes from 10.0.0.11: seq=1 ttl=64 time=0.091 ms64 bytes from 10.0.0.11: seq=2 ttl=64 time=0.109 ms^C

3.解释:这个ip是个vip,即虚拟ip,并非是真实ip。

查看dns的域名映射,在busybox容器中

(1)进入worker1的busybox中运行shell

[vagrant@swarm-worker1 ~]$ docker exec -it 5e41a sh/ # 

(2)查询whoami的真实ip

/ # nslookup whoami或者/ # nslookup tasks.whoami

(3)在whoami服务上运行ip a查看网址,是没有10.0.0.11的虚拟网络的

[vagrant@swarm-manager ~]$ docker psCONTAINER ID        IMAGE                   COMMAND             CREATED              STATUS              PORTS               NAMESd780c8fa2031        jwilder/whoami:latest   "/app/http"         About a minute ago   Up About a minute   8000/tcp            whoami.2.vus1yw9b4i519crs3h1zi48ln[vagrant@swarm-manager ~]$ docker exec d780 ip a1: lo: 
mtu 65536 qdisc noqueue state UNKNOWN qlen 1000    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever28: eth1@if29:
mtu 1450 qdisc noqueue state UP    link/ether 02:42:0a:ff:00:09 brd ff:ff:ff:ff:ff:ff    inet 10.255.0.9/16 brd 10.255.255.255 scope global eth1       valid_lft forever preferred_lft forever30: eth2@if31:
mtu 1500 qdisc noqueue state UP    link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff    inet 172.18.0.3/16 brd 172.18.255.255 scope global eth2       valid_lft forever preferred_lft forever32: eth0@if33:
mtu 1450 qdisc noqueue state UP    link/ether 02:42:0a:00:00:0e brd ff:ff:ff:ff:ff:ff    inet 10.0.0.14/24 brd 10.0.0.255 scope global eth0       valid_lft forever preferred_lft forever

4.检查访问虚拟网络

(1)进入busybox client容器

/etc # wget whoami:8000Connecting to whoami:8000 (10.0.0.11:8000)saving to 'index.html'index.html           100% |*********************************************|    17  0:00:00 ETA'index.html' saved查看/etc # more index.htmlI'm a0aeae5814f5

(2)第二次访问,hostname变了

删除之前index.html/etc # mv index.html index.html.1/etc # wget whoami:8000Connecting to whoami:8000 (10.0.0.11:8000)saving to 'index.html'index.html           100% |*********************************************|    17  0:00:00 ETA'index.html' saved/etc # more index.htmlI'm d780c8fa2031【备注:d780c8fa2031是manager上docker whoami容器的hostname!上面的同理。】

(3)因为每次访问10.0.0.11(whoami),返回是每个不同的地址对应的主机名。做负载均衡。

 
 

 

转载地址:http://vwfgi.baihongyu.com/

你可能感兴趣的文章
Android Tombstone/Crash的log分析和定位
查看>>
Android Native/Tombstone Crash Log 详细分析
查看>>
怎么更改安卓系统铃声级数大小
查看>>
怎么更改开机铃声的声音大小
查看>>
Linux内核驱动之GPIO子系统(一)GPIO的使用
查看>>
system系统调用的使用
查看>>
怎么在编译时打印log
查看>>
怎么添加一个tinymix可执行文件的te文件
查看>>
usb BC1.2的三种端口
查看>>
linux下的"BusHound"——usb_mon非常好
查看>>
linux usb枚举过程分析【host】
查看>>
android之通过USB插拔流程来了解android UEvent
查看>>
[RK3288][Android6.0] USB 枚举过程小结
查看>>
CarPlay简介
查看>>
CarPlay介绍
查看>>
CarPlay wireless(蓝牙+WiFi)连接方案(蓝牙部分)
查看>>
CarPlay wireless(蓝牙+WiFi)连接方案(Wi-Fi部分)
查看>>
CarPlay wired连接与wireless连接相互切换
查看>>
USB linux NCM usbnet驱动详解
查看>>
USB OTG规范的SRP和HNP协议
查看>>