0

我目前有大约 5 个网络服务器在反向代理后面运行。我想使用外部 AD 通过 ldap 协议对我的用户进行身份验证。docker-engine 能够单独区分每个容器吗?

我目前的理解是,如果没有容器化目录服务或不为每个容器公开不同的端口,这是不可能的,但我有疑问。如果我从我的容器 ping 外部服务器,我可以在同一个容器中毫无问题地得到回复。回复如何能够到达正确的容器?我无法理解任何其他协议的不同之处,但同时需要反向代理来提供多个网络服务器的内容。如果有人能让我更清楚一点,我将不胜感激。

4

1 回答 1

1

在深入挖掘之后,我找到了我想要的东西。

来自容器的任何流量都将由 docker 在默认网络上通过 iptables 使用 IP 伪装(类似于 NAT)自动路由。它的工作方式是来自容器的数据包将被剥离容器 IP 地址并替换为主机 IP 地址。原始 IP 地址将被记住,直到 tcp 会话结束。然后流量将到达目的地,任何回复都将发送回主机。回复数据包将被剥离主机 ip 并发送到正确的容器。这就是为什么您可以从容器 ping 另一台服务器并在同一个容器中获得回复的原因。

但显然它不适用于网络服务器的传入流量,因为第一步是客户端启动与网络服务器的会话。这就是需要反向代理的原因。

我可能会遗漏一些东西,并且可能会误解其他一些东西,但这是一般的想法。

TLDR:传出流量(和任何回复)将由 docker 自动路由,您必须使用反向代理将传入流量路由到多个容器。

于 2021-07-30T13:29:23.257 回答