docker(十八):集群服务间通信

一、    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/whoami
knns4nhln5ten8cvnxmwcg868

3.查看whoami服务启动状态
(1)查看启动服务

[vagrant@swarm-manager ~]$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                   PORTS
qwr4cuyrr86a        client              replicated          1/1                 busybox:latest
knns4nhln5te        whoami              replicated          1/1                 jwilder/whoami:latest   *:8000->8000/tcp

(2)查看运行地点

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

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

[vagrant@swarm-worker2 ~]$ docker ps
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS               NAMES
31b30e072daa        jwilder/whoami:latest   "/app/http"         2 minutes ago       Up 2 minutes        8000/tcp            whoami.1.damei4u1ihx7hgrg7rufievaf
[vagrant@swarm-worker2 ~]$ curl 127.0.0.1:8000
I'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 ls
ID                  NAME                MODE                REPLICAS            IMAGE                   PORTS
qwr4cuyrr86a        client              replicated          1/1                 busybox:latest
knns4nhln5te        whoami              replicated          1/1                 jwilder/whoami:latest   *:8000->8000/tcp
[vagrant@swarm-

[vagrant@swarm-manager ~]$ docker service ps client
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
ywnrazvemzij        client.1            busybox:latest      swarm-worker1       Running             Running 7 minutes ago

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

[vagrant@swarm-worker1 ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
5e41a868d69d        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 whoami
PING whoami (10.0.0.11): 56 data bytes
64 bytes from 10.0.0.11: seq=0 ttl=64 time=0.237 ms
64 bytes from 10.0.0.11: seq=1 ttl=64 time=0.096 ms
64 bytes from 10.0.0.11: seq=2 ttl=64 time=0.074 ms
64 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 loss
round-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=2
whoami scaled to 2
overall progress: 2 out of 2 tasks
1/2: running
2/2: running
verify: Service converged

2.查看whoami服务
(1)总体详细状态

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

(2)进入manager查看进程

[vagrant@swarm-manager ~]$ docker ps
CONTAINER ID        IMAGE                   COMMAND             CREATED              STATUS              PORTS               NAMES
d780c8fa2031        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 whoami
PING whoami (10.0.0.11): 56 data bytes
64 bytes from 10.0.0.11: seq=0 ttl=64 time=0.237 ms
64 bytes from 10.0.0.11: seq=1 ttl=64 time=0.096 ms
64 bytes from 10.0.0.11: seq=2 ttl=64 time=0.074 ms
64 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 loss
round-trip min/avg/max = 0.071/0.119/0.237 ms
/ # ping whoami
PING whoami (10.0.0.11): 56 data bytes
64 bytes from 10.0.0.11: seq=0 ttl=64 time=0.056 ms
64 bytes from 10.0.0.11: seq=1 ttl=64 time=0.091 ms
64 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 ps
CONTAINER ID        IMAGE                   COMMAND             CREATED              STATUS              PORTS               NAMES
d780c8fa2031        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 a
1: lo: <LOOPBACK,UP,LOWER_UP> 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 forever
28: eth1@if29: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> 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 forever
30: eth2@if31: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> 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 forever
32: eth0@if33: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> 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:8000
Connecting 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.html
I'm a0aeae5814f5

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

删除之前index.html
/etc # mv index.html index.html.1
/etc # wget whoami:8000
Connecting 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.html
I'm d780c8fa2031
【备注:d780c8fa2031是manager上docker whoami容器的hostname!上面的同理。】

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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值