32. docker swarm 集群服务通信 之 RoutingMesh - internal 网络

1. 两个 service 是如何通信的

  通过内置的 DNS 服务发现的功能  相互通信的

  

 2. 创建一个 overlay 的 网络

  docker network create -d overlay demo

3. 创建一个 whoami 的service  访问 

  当访问 该容器 的 8000 端口的 返回 容器的 host

    docker service create --name whoami -p 8000:8000 --network demo -d jwilder/whoami

  查看创建的容器

    docker service ls

    docker service ps whoami  # 发现运行在 docker-node2 上

    访问容器的 8000 端口

      curl 127.0.0.1:8000

    将 whoami 拓展为两个

      docker service scale whoami=2

    docker service ps whoami  # 发现运行在 docker-node2 和 docker-host 上

5. 创建一个 busybox 服务

  创建容器

    docker service create --name client -d --network demo busybox sh -c 'while true; do sleep 3600; done'

  查看创建的容器

    docker service ls

    docker service ps client  # 发现运行在 docker-node1 上

6. 进入 到 client 内部

  在 docker-node1 上

    docker ps

    进入 容器 内部

      docker exec -it 0f5549415e58 sh

    ping whoami 容器  一直返回的 为 10.0.0.5 

      ping whoami

     用mac nslookup (查看 某个网站所对应的 ip 地址 )

     查询 ww.baidu.com 对应的 ip 地址

      nslookup www.baidu.com

  进入 busybox 容器 内部

    docker exec -it f69c830331de bash

    查看 访问的 whoami 容器

      查看虚拟 ip 地址 nslookup  whoami

      查看正式 ip 地址 nslookup tasks.whoami

7.拓展 whoami 为 3个 再次查看 whoami 的 ip 地址

  docker service scale whoami=3

  在 client 下 查看 whoami 的ip 

    查看虚拟 ip 地址 nslookup  whoami

    查看正式 ip 地址 nslookup tasks.whoami

8. 验证 每次请求 都不是同一台 服务器

  在 client 下

    下载 whoami 内的 内容

      wget whoami:8000

    读取 下载下来的 index.html 的内容    说明 读取的是两个不同的 container

      more index.html

9. Routing Mesh 的两种体现

  Internal 网络

    在 swarm 内 , 容器和容器之间是通过 连接到同一个 overlay 网络进行访问,通过 service name 进行通信 (eg: 容器内 通过 ping service name ), 但是 service name 所对应的 ip 不是 真实 ip 而是 VIP (Virtual ip)

  Ingress 网络

    如果 service 有绑定端口, 则此服务 可以通过任意swarm节点访问

posted @ 2019-08-23 15:51  zonehoo  阅读(668)  评论(0编辑  收藏  举报