Docker服务器网络-拒绝传入连接但允许传出

时间:2020-07-22 15:54:55

标签: docker nginx networking reverse-proxy iptables

我们使用Docker容器在公共互联网上可以访问的服务器上部署多个小型应用程序。某些服务需要相互通信,但是由于硬件要求不同(服务器位于不同的网络和IP上),它们会部署在不同的服务器上。

Q:除了阻止某些允许的IP并同时允许Docker容器的所有传出连接之外,配置阻止SERVER:PORT传入请求的最佳方法是什么?

我们玩过两件事,并尝试使其工作:

  1. 绑定到127.0.0.1的Docker端口并通过nginx路由所有流量。这确实是配置繁重的工作,某些基础结构组件无法通过http(s)进行代理,因此我们需要将它们添加到nginx.conf流服务器块中,并因此在服务器上打开一个端口(每个人都可以访问)

  2. 使用iptables限制对已发布端口的访问。像这样:iptables -A INPUT -I DOCKER-USER -p tcp -i eth0 -j DROP。但这也有2个重大失败。首先,似乎很难在这样的结构中允许多个IP地址,另一方面,这种方法似乎也阻止了我们的docker传出连接(到Internet)。例如:在我们将其激活后,来自码头工人容器内的ping google.com被拒绝了。

1 个答案:

答案 0 :(得分:2)

不确定我明白了吗。在设计方面,外部世界可用的内容在DMZ中或通过API网关发布。

您的docker swarm / kubernetes集群不得直接通过Internet或仅通过API网关或DMZ上的应用程序直接访问。

因此很可能您的docker服务器将无法直接访问。即使是这种情况,如果您不明确地将端口导出到群集的主机/外部,则该端口将仅限于docker的虚拟网络以允许跨容器通信。