我们将Docker Swarm与反向代理(Traefik)结合使用,以在云提供商处托管实习应用程序。我们只想为某些特定的外部IP地址打开端口80/443。
当我们在docker-compose.yml
文件中公开端口(通过Docker堆栈部署)时,Docker使用iptables将这些端口公开为默认端口。有没有一种干净的方法可以使某些特定IP的限制不被Docker覆盖?我们使用UFW / firewalled之类的工具来解决此问题,但是Docker似乎没有注意到我们所做的更改,因此忽略了它们。也许我们错过了某些东西,我们正在寻找最佳实践之类的东西。可以自动化并且不需要人工返工的东西。
firewall-cmd --permanent --zone=public --add-rich-rule='
rule family="ipv4"
source address="XXX.XXX.XXX.XXX"
port protocol="tcp" port="80" accept'
firewall-cmd --permanent --zone=public --add-rich-rule='
rule family="ipv4"
source address="XXX.XXX.XXX.XXX"
port protocol="tcp" port="443" accept'
docker-compose.yaml
services:
aservice:
[...]
ports:
- protocol: tcp
published: 80
target: 80
mode: host
- protocol: tcp
published: 443
target: 443
mode: host
docker stack deploy --compose-file=docker-compose.yaml service-name