如何使用普通 tcp 在 docker 负载均衡器后面获取真实客户端 ip?
How to get real client ip behind docker load balancer using plain tcp?
我想要的
我想在我的 TCP 服务器中获取客户端的 IP 并将其用于 whitelist/bind 操作、检测区域(语言和货币)等。
我是如何处理的
我正在使用 python 的 TornadoWeb 框架来设置我的 tcp 服务器。
它包含TCPServer.handler_stream(stream: IOStream, address: tuple[str, int])
从哪里我可以得到客户的 IP 地址。当 运行 主机网络(即直接公开我的端口)
时一切都很好
问题
如果在 docker 群中启动多个任务(容器),因此使用 docker 的负载均衡器,客户端的 IP 地址将替换为 docker 的内部地址。
问题
我如何配置 docker swarm 或其他负载平衡器以某种方式将真实客户端的 ip 发送到我的服务器?
我并没有特别局限于一个软件或另一个软件,我也不知道哪个更好,我唯一不会考虑的是使用 Kubernetes(至少现在不是),所以任何关于也欢迎使用软件而不是配置!
客户端和服务器可以更改,因此无论协议本身如何,我都可以使用的其他技术也很有用。但是,可以使用 HTTPs 请求通过 X-Forwarded-For
或 X-Real-IP
headers 收集 IP 地址,但我不想这样做。
How do i configure docker swarm or another load balancer to somehow send real client's ip to my server?
Docker 已经有一个未解决的问题,请参阅 https://github.com/docker/roadmap/issues/157 。目前无法进行任何配置。
正如您之前提到的,在问题关闭之前,您将不得不使用一些自定义方法来处理它。
最简单的解决方案是用另一个类似 nginx 的负载均衡器替换负载均衡器,这里有一个 nifty guide for swarm
在 nginx 配置文件中,你只需要保留原始请求 headers 以密切关注它们,你可以看到如何 here 但要点是添加一个带有 [=10 的 nginx 指令=] 当您将请求代理到您的负载平衡实例之一时,它的变量
取决于您使用的实例数量 docker-compose 可能比使用 swarm 更容易,后者不那么简单
我想要的
我想在我的 TCP 服务器中获取客户端的 IP 并将其用于 whitelist/bind 操作、检测区域(语言和货币)等。
我是如何处理的
我正在使用 python 的 TornadoWeb 框架来设置我的 tcp 服务器。
它包含TCPServer.handler_stream(stream: IOStream, address: tuple[str, int])
从哪里我可以得到客户的 IP 地址。当 运行 主机网络(即直接公开我的端口)
问题
如果在 docker 群中启动多个任务(容器),因此使用 docker 的负载均衡器,客户端的 IP 地址将替换为 docker 的内部地址。
问题
我如何配置 docker swarm 或其他负载平衡器以某种方式将真实客户端的 ip 发送到我的服务器?
我并没有特别局限于一个软件或另一个软件,我也不知道哪个更好,我唯一不会考虑的是使用 Kubernetes(至少现在不是),所以任何关于也欢迎使用软件而不是配置!
客户端和服务器可以更改,因此无论协议本身如何,我都可以使用的其他技术也很有用。但是,可以使用 HTTPs 请求通过 X-Forwarded-For
或 X-Real-IP
headers 收集 IP 地址,但我不想这样做。
How do i configure docker swarm or another load balancer to somehow send real client's ip to my server?
Docker 已经有一个未解决的问题,请参阅 https://github.com/docker/roadmap/issues/157 。目前无法进行任何配置。
正如您之前提到的,在问题关闭之前,您将不得不使用一些自定义方法来处理它。
最简单的解决方案是用另一个类似 nginx 的负载均衡器替换负载均衡器,这里有一个 nifty guide for swarm 在 nginx 配置文件中,你只需要保留原始请求 headers 以密切关注它们,你可以看到如何 here 但要点是添加一个带有 [=10 的 nginx 指令=] 当您将请求代理到您的负载平衡实例之一时,它的变量
取决于您使用的实例数量 docker-compose 可能比使用 swarm 更容易,后者不那么简单