临时禁用Docker上的暴露端口
我想临时禁用一些docker容器的端口在runitme,所以没有改变图像或停止/启动容器。
我有一些服务运行,一个web客户端,一个authentication服务一个mongodb实例,还有一个负载均衡器,他们都在同一个虚拟机。
由于在Docker中没有API在运行时修改暴露端口,所以我必须使用iptables命令。
所以我已经build立了一些代码,禁用与作为parameter passing的特定容器名称相关的端口。
我有以下规则的authentication服务器:
-DOCKER -d 172.18.0.16/32! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 8081 -j ACCEPT
我的代码修改如下:
-DOCKER -d 172.18.0.16/32! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 8081 -j DROP
在这一点上,我期待着我无法再authentication,但我仍然可以做到。
同时,如果对负载平衡器尝试相同的代码,一切工作正常,我不能按预期访问URL。
这些原始的nginx规则:
-DOCKER -d 172.18.0.11/32! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 81 -j ACCEPT -DOCKER -d 172.18.0.11/32! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 80 -j ACCEPT -DOCKER -d 172.18.0.11/32! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 443 -j ACCEPT
这里修改的:
-DOCKER -d 172.18.0.11/32! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 81 -j DROP -DOCKER -d 172.18.0.11/32! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 80 -j DROP -DOCKER -d 172.18.0.11/32! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 443 -j DROP
在docker ps命令的输出之下
[root @ sandbox-test-28〜]#docker ps 容器ID图像命令创build状态端口名称 d007479faaf4 service-auth-nodejs“/ bin / sh -c \”/ usr / bin“2天前最多2天0.0.0.0:8081->8081/tcp authentication-microservice c073989b49ce nginx“/ bin / bash -c / etc / ng”2 days ago Up 2 days 0.0.0.0:443->443/tcp,0.0.0.0:9000->80/tcp,0.0.0.0:10000->81 / tcp nginx-microservice 432ea895d90a web“/ bin / sh -c \”/ usr / bin“2天前上载2天0.0.0.0:8000->8000/tcp webclient-microservice 0c8141da8c0b mongo“/entrypoint.sh mongo”2天前最多2天0.0.0.0:27017->27017/tcp mongo-microservice [root @ sandbox-test-28〜]#
我错过了什么吗?
你的规则中的子网是不同的:
172.18.0.11/32 (authentication service)
VS
172.18.0.16/32 (nginx)
所以大概,你的validation服务器的数据包通过172.18.0.16
到达,仍然允许一个不同的规则。