Docker 服务器网络 - 拒绝传入连接但允许传出
Docker server networking - reject incoming connections but allow outgoing
我们使用 Docker 容器在我们的服务器上部署多个小型应用程序,这些应用程序可通过 public 互联网访问。有些服务需要相互通信,但是部署在不同的服务器上,因为硬件要求不同(服务器在不同的网络和不同的IP)。
问:配置阻止传入请求到 SERVER:PORT 的最佳方法是什么,除了一些允许的 IP,同时允许所有传出连接Docker 个容器?
我们尝试并尝试让它们正常工作的两个主要方面:
绑定 Docker 端口映射到 127.0.0.1 并通过 nginx 路由每个流量。这确实配置繁重,一些基础设施组件无法通过 http(s) 代理,因此我们需要将它们添加到 nginx.conf stream-server 块,因此在服务器上打开一个端口(可通过大家)。
使用 iptables 限制对已发布端口的访问。所以像这样:iptables -A INPUT -I DOCKER-USER -p tcp -i eth0 -j DROP
。但这也有两个主要的缺点。首先,在这样的构造中似乎很难允许多个 IP 地址,另一方面,这种方法似乎也阻止了我们的 docker 传出连接(到 Internet)。例如:在我们激活它之后,docker 容器中的 ping google.com
被拒绝了。
不确定我明白了。在设计方面,外部世界可用的内容在 DMZ 中或通过 API 网关发布。
您的 docker swarm/kubernetes 集群不能通过互联网直接访问,或者只能通过 API 网关或 DMZ 上的应用程序访问。
很可能无法直接访问您的 docker 服务器。即使是这种情况,如果您不明确将端口导出到集群的 host/outside,它也会限制在 docker 的虚拟网络中以允许跨容器通信。
我们使用 Docker 容器在我们的服务器上部署多个小型应用程序,这些应用程序可通过 public 互联网访问。有些服务需要相互通信,但是部署在不同的服务器上,因为硬件要求不同(服务器在不同的网络和不同的IP)。
问:配置阻止传入请求到 SERVER:PORT 的最佳方法是什么,除了一些允许的 IP,同时允许所有传出连接Docker 个容器?
我们尝试并尝试让它们正常工作的两个主要方面:
绑定 Docker 端口映射到 127.0.0.1 并通过 nginx 路由每个流量。这确实配置繁重,一些基础设施组件无法通过 http(s) 代理,因此我们需要将它们添加到 nginx.conf stream-server 块,因此在服务器上打开一个端口(可通过大家)。
使用 iptables 限制对已发布端口的访问。所以像这样:
iptables -A INPUT -I DOCKER-USER -p tcp -i eth0 -j DROP
。但这也有两个主要的缺点。首先,在这样的构造中似乎很难允许多个 IP 地址,另一方面,这种方法似乎也阻止了我们的 docker 传出连接(到 Internet)。例如:在我们激活它之后,docker 容器中的ping google.com
被拒绝了。
不确定我明白了。在设计方面,外部世界可用的内容在 DMZ 中或通过 API 网关发布。
您的 docker swarm/kubernetes 集群不能通过互联网直接访问,或者只能通过 API 网关或 DMZ 上的应用程序访问。
很可能无法直接访问您的 docker 服务器。即使是这种情况,如果您不明确将端口导出到集群的 host/outside,它也会限制在 docker 的虚拟网络中以允许跨容器通信。