我必须在 docker 容器上启用防火墙吗?

Do I have to enable firewall on docker container?

我想知道我是否需要在容器中启用防火墙。 (嘉宾 OSes)

在GCE、Amazon EC2等传统IaaS上,需要配置防火墙。 (CentOS 6 上的 iptables,7 上的 firewalld,Ubuntu 上的 ufw) 但是,Dockerfile 有 EXPOSE,我猜 Docker 拒绝访问除 Dockerfile.

中声明的端口之外的所有端口

超出我的预期是否正确?

注意:这是关于 OS 内部容器(来宾 OS),而不是 Docker 主机。因为我正在使用 Google Container Engine,所以我现在只对 guest 感兴趣。

您不必在容器内启用或配置防火墙。

关键原因是 Docker 已经为每个容器和发布的端口添加了 iptables 规则,并且 Docker 必要时与 firewalld 通信。 (iptables、ufw 和 firewalld 都呈现了底层 netfilter 实现的视图;它们在内部都是一样的)。

注意没有"guest OS";容器内的所有内容都 运行 在与外部相同的内核上。也许使用一些不同的用户空间工具,但不是单独的 OS。

此外,Docker 不会安装任何规则来阻止未公开的端口。

这取决于你想用防火墙挡住谁。因为你特意说了Container Engine,所以上面Bryan的回答不适用。

您是否尝试在集群内设置防火墙?还是您正在尝试防御 Google 云项目的其余部分?还是您要防御互联网?

在一个集群中,假设(到目前为止)是 运行 个进程都在同一个 space 中。我认为我们会在未来几个月看到该领域的更多增长(网络政策),但这就是今天的情况,因此没有自动化的集成防火墙设置。

同样在 Google 云项目中。

关于 Internet,您应该关闭您的云防火墙,以防任何您不明确需要向世界公开的内容。这应该是默认值。如果您不确定,请检查云控制台。当您使用 Kubernetes 暴露服务时,我们会自动为您打开防火墙。