全部产品
容器服务

使用 Docker Compose 测试集群网络连通性

更新时间:2017-06-07 13:26:11   分享:   

本文档提供一个简单的 Compose file 来实现一键部署,您可以通过访问 endpoint 来检查容器间的互通性。

场景

在 Docker 集群中部署相互依赖的应用时,需要应用之间可以互相访问,实现跨 host 间容器网络的互通性。而有时候因为网络问题,会导致 link 之间不能互相访问。类似情况下,很难定位发生错误的原因。因此,使用一套简单易用的 Compose file 来测试当前集群网络各个主机上容器之间是否互通变得很重要。

解决方案

使用我们提供的镜像和编排模板测试容器间的互通性。

  1. web:
  2. image: registry.aliyuncs.com/xianlu/test-link
  3. command: python test-link.py
  4. restart: always
  5. ports:
  6. - 5000
  7. links:
  8. - redis
  9. labels:
  10. aliyun.scale: '3'
  11. aliyun.routing.port_5000: test-link;
  12. redis:
  13. image: redis
  14. restart: always

本示例使用 Flask 来完成测试功能。

以上编排模板部署了一个 Web 服务和一个 Redis 服务。Web 服务包含三个 Flask 容器。Flask 容器启动时,会被平均分配到三个节点上运行。这就保证了三个容器在不同的宿主机上,只要能互相 ping 通,就说明当前网络是可以实现容器跨主机互联的。Redis 运行在其中一台机器上,每个 Flask 容器启动后都会向 Redis 注册,报告自己的 IP 地址。当三个 Flask 容器都启动完毕后,Redis 中也就有了集群中所有容器的 IP 地址。访问其中任意一个 Flask 容器,该容器就会向另外两个容器发起 ping 命令,通过 ping 的结果确定当前集群的网络连通性。

操作步骤

  1. 创建一个包含三个节点的集群。

    本示例中集群的名称为 test-link。有关如何创建集群的详细信息,参见 创建集群

    注意:创建集群时,请创建负载均衡实例。

    jiqun

  2. 使用上面的模板,创建一个应用(本示例中创建名为 test-cluster-link 的应用),部署 web 服务和 redis 服务。

    有关如何创建应用的详细信息,参见 创建应用

  3. 应用列表 页面,单击应用的名称,查看创建的服务。

    fuwu

  4. 单击 web 服务的名称,进入服务详情页面。

    可以看到,三个容器(test-cluster-link_web_1test-cluster-link_web_2test-cluster-link_web_3)都已经启动了,并且分布在不同的节点上。

    container

  5. 访问 web 服务的访问端点。

    从页面的反馈来看,容器 test-cluster-link_web_1 可以访问容器 test-cluster-link_web_2test-cluster-link_web_3

    test

    刷新一下页面。可以看到,容器 test-cluster-link_web_2 可以访问容器 test-cluster-link_web_1test-cluster-link_web_4

    test

    以上结果显示当前集群容器之间是互通的。

本文导读目录
本文导读目录
以上内容是否对您有帮助?