使用docker容器作为代理

一般来说,我正在尝试使用泊坞窗容器作为同一networking覆盖内的其他docker容器的HTTP代理。 让我们调用这个代理容器网关。 假设网关configuration了所有必需的CA证书,此网关假设将接收到的HTTP请求更改为HTTPS请求,并将其转发给外部世界。

现在让我们来具体说明一下,我使用的是docker swarm和services + replicas,网关在端口80上提供了一些API,而容器使用网关的服务名+端口80来请求这个API(这与代理I需要),例如:

HTTP://网关:80 / API /注销

我也想用这个端口代理,这意味着其他容器可以发送HTTP请求到端口80上的某个IP(而不是DNS),这个请求将通过网关,而网关将查看http请求看到这个消息不是“他”,它会执行http S (端口443)请求到实际的外部服务器。

我不能在下面的链接中使用Docker代理的解决scheme:

https://docs.docker.com/engine/admin/systemd/#httphttps-proxy

因为这个HTTP代理解决scheme只适用于已经运行的代理,而不是一个dockerized。 (如果我使用它,docker将无法从repo获取图像,因为它将查找不存在的代理,因为docker本身没有启动Gateway容器)。

所以,这使我面对这个问题。 我将如何将内部容器请求转发到网关,而不使用网关服务名称。

我认为iptables是唯一的select,但如何? 我不能使用网关IP,因为网关是3个虚拟机上的副本,并且IP发生了变化,无论如何,任何发送http:// some_external_server_ip:80 / some_api的容器都需要以某种方式通过网关。

TLDR

我可以在iptables中执行一些操作(使用docker链和PREROUTING链),将端口80上的所有数据包(通过覆盖networking中的容器发送)转发到名为Gateway的服务容器中,而忽略目标ip? (只能由端口识别数据包并将其转发给特定的合作者)

希望这是明确的… =)