我在 rackspace 有一个小型集群,其私有网络范围为 192.168.3.0/24。我希望我的工作服务能够使用此网络相互通信,但不知道该如何让 docker 允许这样做。
我的理想配置是一个面向公众的单一容器,该容器将连接代理到一个工作器,然后该工作器可以与私有网络内的各种服务对话以完成其工作。
eth0 -> load balancer --> 192.168.3.3:80 --> 192.168.3.5:1234 (db)
\-> 192.168.3.4:80 /
\> 192.168.3.5:80/
如果所有工人都在同一台机器上,我就可以完成此操作,docker run --link ...
但由于他们在不同的机器上,所以这样做行不通。
上述示例中的工作人员使用类似如下的命令启动:
docker run -d -p $PRIVATE_IPV4:80:80 myworker
数据库启动如下:
docker run -d -p $PRIVATE_IPV4:1234:1234 mydb
来自主持人我可以很好地与每个容器通信,但每个容器无法路由到任何其他容器。IE 可以curl http://192.168.3.4
从主机运行,但不能从主机上运行的容器运行。
本例中的负载均衡器是 nginx,启动方式如下:
docker run -d -p $PUBLIC_IPV4:80:80 nginx
nginx.conf
upstream app {
server 192.168.3.3:80;
server 192.168.3.4:80;
server 192.168.3.5:80;
}
...
这似乎是一个非常标准的配置。我做错了什么?
答案1
您可以尝试在 CoreOS 之上的 Kubernetes 等容器管理器中实现您的架构。有很多指南。这是 DockerCon 上的演示https://www.brighttalk.com/webcast/11427/136165关于容器集群管理。
答案2
目前,Docker 本身并不提供容器网络设施。编织是最易于使用的覆盖 SDN 解决方案之一。它适用于任何云,甚至跨多个云。
我应该声明,我是 Weave 工程团队的一员。