docker化的Web服务在共同的nginx rproxy下编排:通过rproxy路由中间stream量

一个以nginx作为主机中央rproxy的docker容器占用端口80.它将每个基于域名的请求redirect到N个内部(django,flask)docker化服务,每个服务暴露8000或5000个。

每个服务都有一个相应的子域,用于parsing主机的(AWS EC2实例)公共IP。 这些条目位于注册商(domain.com)的DNS Alogging以及/etc/hosts/etc/hosts中。

你将如何通过rproxy容器使内部服务相互通话而不需要拨打公共互联网?

例如,如果我监视来自主机的调用dns调用:

sudo tcpdump -vvv -s 0 -l -n port 53

如果我向主持人提出要求:

 curl a.mydomain.com 

没有传出调用,但是如果我从一个容器的shell发出相同的请求,那么我在tcpdump控制台中得到结果:

 15:16:43.115879 IP (tos 0x0, ttl 255, id 50739, offset 0, flags [none], proto UDP (17), length 81) 172.31.0.2.53 > 172.31.21.245.35952: [udp sum ok] 28855 q: A? a.mydomain.com. 1/0/0 a.mydomain.com. [1m] A <public-IP-here> (53) 

我的主机的/etc/resolv.conf文件:

 nameserver 172.31.0.2 search us-west-2.compute.internal 

每个容器的/etc/resolv.conf

 search us-west-2.compute.internal nameserver 127.0.0.11 options ndots:0 

有任何想法吗?