【发布时间】:2021-11-21 16:00:35
【问题描述】:
我想要什么
我想在我的 TCP 服务器中获取客户端的 IP 并将其用于白名单/绑定操作、检测区域(针对语言和货币)等。
我是如何接近它的
我正在使用 Python 的 TornadoWeb 框架来设置我的 tcp 服务器。
它包含TCPServer.handler_stream(stream: IOStream, address: tuple[str, int])
从那里我可以得到客户端的 IP 地址。使用主机网络运行时一切都很好(即直接暴露我的端口)
问题
如果在 docker swarm 中启动了多个任务(容器),因此使用 docker 的负载均衡器,客户端的 IP 地址将被替换为 docker 的内部地址。
问题
如何配置 docker swarm 或其他负载均衡器以某种方式将真实客户端的 ip 发送到我的服务器?
我并没有特别拘泥于一个软件或另一个,我也不知道哪个更好,我唯一不会考虑的事情是使用 Kubernetes(至少现在不是),所以任何关于软件的建议比配置也欢迎!
客户端和服务器可以更改,因此无论协议本身如何,我都可以使用的其他技术也很有用。但是,可以使用 HTTPs 请求通过 X-Forwarded-For 或 X-Real-IP 标头收集 IP 地址,但我想避免这样做。
【问题讨论】:
标签: python docker tcp network-programming docker-swarm