在 docker 中使用 HAProxy 和主机网络

Using HAProxy in docker with host network

当 运行 HAProxy 在 docker 容器中时,当 运行 具有 --net=host 选项的容器时,我们只能看到(并转发)原始客户端的 IP描述 here.

我们的问题:从安全角度来看,这是否可取?这是否会让攻击者更容易利用 HAProxy 漏洞? 或者这是常见的做法?

好吧 --net=host 是将容器暴露给 public 接口的常见做法。如果你不设置 --net=host 将无法在 docker 网络之外访问 haproxy。

如果您是 运行 docker swarm,那么您将从 X-Forwarded-For header.

中的 swarm 入口网络获取 IP

您可以使用 --network=host 解决此问题,但您无法将容器连接到其他覆盖网络,这可能会导致您的设置出现问题。例如,如果你想将 HAProxy 连接到其他容器。

幸好可以用--publish mode=host,...代替默认的--publish mode=ingress直接绑定外网ip

然后HAProxy会看到真实的客户端ip。另见 https://github.com/docker-archive/dockercloud-haproxy/issues/134#issuecomment-288485710