Ubuntu
容器的全域 http 代理
在我的 docker 容器中,有一些應用程序會發出 http(s) 請求。如何配置容器以便所有這些請求都通過外部 http 代理?
Docker 文件建議設置
HTTP_PROXY
env var,但是,據我了解,這是一個建議設置,容器中的應用程序不會強制使用它。我無法更改主機系統上的任何內容,因此我正在尋找一些聰明的 docker 或容器作業系統配置。容器作業系統是 ubuntu:18.04。
如果要強制使用代理,則需要在網路級別攔截流量。這總是有一個缺點,即 HTTPS 流量不容易被攔截,因為您需要通過受信任的 CA 進行中間人操作。
如果 HTTPS 不是問題(因為您決定忽略它,或者因為您決定將自己的 CA 部署到每個容器的證書信任儲存區),那麼會想到幾個攔截流量的點:
- docker 主機系統(又名容器的預設網關)
- docker主機系統的預設網關
在任何一種情況下,您都需要使用
iptables
(或類似的防火牆工具集)來重定向來自容器的流量port 80
(443
在 HTTPS 的情況下)以通過代理重定向。使用
iptables
它可能看起來像sudo iptables -t nat -A PREROUTING -i eth1 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3129
3129
例如,SQUID 可能正在偵聽 http 連接的埠在哪裡。更多資訊可以在 SQUID 配置範例中找到:https ://wiki.squid-cache.org/ConfigExamples/Intercept/LinuxRedirect