Networking 临时禁用Docker上的暴露端口

Networking 临时禁用Docker上的暴露端口,networking,docker,ports,Networking,Docker,Ports,我想在runitme上临时禁用一些docker容器端口,这样就不会更改映像或停止/启动容器 我有一些正在运行的服务,一个webclient、一个身份验证服务、一个mongodb实例和一个loadbalancer,它们都在同一个VM中 由于docker中没有API可以在运行时修改公开的端口,所以我必须使用iptables命令 因此,我构建了一些代码来禁用与作为参数传递的特定容器名称相关的端口 对于身份验证服务器,我有以下规则: -A DOCKER -d 172.18.0.16/32 ! -i br

我想在runitme上临时禁用一些docker容器端口,这样就不会更改映像或停止/启动容器

我有一些正在运行的服务,一个webclient、一个身份验证服务、一个mongodb实例和一个loadbalancer,它们都在同一个VM中

由于docker中没有API可以在运行时修改公开的端口,所以我必须使用iptables命令

因此,我构建了一些代码来禁用与作为参数传递的特定容器名称相关的端口

对于身份验证服务器,我有以下规则:

-A DOCKER -d 172.18.0.16/32 ! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 8081 -j ACCEPT -码头工人-d 172.18.0.16/32-i br-3ec61cf14e6e-o br-3ec61cf14e6e-p tcp-m tcp--dport 8081-j ACCEPT 我的代码将其修改如下:

-A DOCKER -d 172.18.0.16/32 ! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 8081 -j DROP -码头工人-d 172.18.0.16/32-i br-3ec61cf14e6e-o br-3ec61cf14e6e-p tcp-m tcp--dport 8081-j DROP 在这一点上,我希望我不能再验证了,但我仍然可以这样做

同时,如果对负载平衡器尝试相同的代码,一切正常,我无法按预期访问URL

这些是nginx的原始规则:

-A DOCKER -d 172.18.0.11/32 ! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 81 -j ACCEPT -A DOCKER -d 172.18.0.11/32 ! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 80 -j ACCEPT -A DOCKER -d 172.18.0.11/32 ! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 443 -j ACCEPT -码头工人-d 172.18.0.11/32-i br-3ec61cf14e6e-o br-3ec61cf14e6e-p tcp-m tcp--dport 81-j ACCEPT -码头工人-d 172.18.0.11/32-i br-3ec61cf14e6e-o br-3ec61cf14e6e-p tcp-m tcp--dport 80-j ACCEPT -码头工人-d 172.18.0.11/32-i br-3ec61cf14e6e-o br-3ec61cf14e6e-p tcp-m tcp--dport 443-j ACCEPT 以下是修改后的:

-A DOCKER -d 172.18.0.11/32 ! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 81 -j DROP -A DOCKER -d 172.18.0.11/32 ! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 80 -j DROP -A DOCKER -d 172.18.0.11/32 ! -i br-3ec61cf14e6e -o br-3ec61cf14e6e -p tcp -m tcp --dport 443 -j DROP -码头工人-d 172.18.0.11/32-i br-3ec61cf14e6e-o br-3ec61cf14e6e-p tcp-m tcp--dport 81-j DROP -码头工人-d 172.18.0.11/32-i br-3ec61cf14e6e-o br-3ec61cf14e6e-p tcp-m tcp--dport 80-j下降 -码头工人-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 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d007479faaf4 service-auth-nodejs "/bin/sh -c \"/usr/bin" 2 days ago Up 2 days 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 days ago Up 2 days 0.0.0.0:8000->8000/tcp webclient-microservice 0c8141da8c0b mongo "/entrypoint.sh mongo" 2 days ago Up 2 days 0.0.0.0:27017->27017/tcp mongo-microservice [root@sandbox-test-28 ~]# [root@sandbox-test-28~]#docker ps 容器ID映像命令已创建状态端口名称 d007479faaf4服务身份验证节点/bin/sh-c\“/usr/bin”2天前启动2天0.0.0.0:8081->8081/tcp身份验证微服务 c073989b49ce nginx“/bin/bash-c/etc/ng”2天前上升2天0.0.0.0:443->443/tcp,0.0.0.0:9000->80/tcp,0.0.0.0:10000->81/tcp nginx微服务 432ea895d90a web“/bin/sh-c\”/usr/bin“2天前启动2天0.0.0.0:8000->8000/tcp网络客户端微服务 0c8141da8c0b mongo“/entrypoint.sh mongo”2天前上升2天0.0.0.0:27017->27017/tcp mongo微服务 [root@sandbox-测试-28~]#
我遗漏了什么吗?

您规则中的子网不同:

172.18.0.11/32 (authentication service)
vs


因此,您的身份验证服务器的数据包可能通过
172.18.0.16
到达,并且仍然由不同的规则允许。

子网是相同的,身份验证的IP是不同的172.18.0.16,nginx的IP是不同的172.18.0.11这两个问题都是这两个服务的规则,3条用于负载平衡器的规则和一条用于身份验证的规则。
172.18.0.16/32 (nginx)