我们使用Docker容器在公共互联网上可以访问的服务器上部署多个小型应用程序。某些服务需要相互通信,但是由于硬件要求不同(服务器位于不同的网络和IP上),它们会部署在不同的服务器上。
Q:除了阻止某些允许的IP并同时允许Docker容器的所有传出连接之外,配置阻止SERVER:PORT传入请求的最佳方法是什么?
我们玩过两件事,并尝试使其工作:
绑定到127.0.0.1的Docker端口并通过nginx路由所有流量。这确实是配置繁重的工作,某些基础结构组件无法通过http(s)进行代理,因此我们需要将它们添加到nginx.conf流服务器块中,并因此在服务器上打开一个端口(每个人都可以访问)
使用iptables限制对已发布端口的访问。像这样:iptables -A INPUT -I DOCKER-USER -p tcp -i eth0 -j DROP
。但这也有2个重大失败。首先,似乎很难在这样的结构中允许多个IP地址,另一方面,这种方法似乎也阻止了我们的docker传出连接(到Internet)。例如:在我们将其激活后,来自码头工人容器内的ping google.com
被拒绝了。
答案 0 :(得分:2)
不确定我明白了吗。在设计方面,外部世界可用的内容在DMZ中或通过API网关发布。
您的docker swarm / kubernetes集群不得直接通过Internet或仅通过API网关或DMZ上的应用程序直接访问。
因此很可能您的docker服务器将无法直接访问。即使是这种情况,如果您不明确地将端口导出到群集的主机/外部,则该端口将仅限于docker的虚拟网络以允许跨容器通信。