Docker 网络篇之 overlay 和 iptables

阅读时长 5 分钟读完

在 Docker 中,网络是非常重要的组成部分。在分布式系统中,容器之间需要进行通信,而 Docker 提供了不同的网络模式来实现容器之间的通信。其中,overlay 网络模式和 iptables 网络模式是最常用的两种网络模式。

Overlay 网络模式

Overlay 网络模式是一种将容器连接到跨主机的虚拟网络中的方法。它利用 Docker 内置的网络驱动程序(如 VXLAN、IPSec、GRE),将多个 Docker 主机上的容器连接到同一虚拟网络中,使它们可以彼此通信。这种网络模式适用于跨主机容器之间的通信和负载均衡。

使用 overlay 网络模式

使用 overlay 网络模式需要有至少两个 Docker 主机。首先,在各个主机上都创建一个 overlay 网络,然后启动容器并指定已创建的网络。

在创建网络时,需要指定一个名字和一个驱动程序。下面是创建一个名为 my-overlay-network 的 overlay 网络的命令:

接着,需要在不同的 Docker 主机上启动各自的容器,并将容器连接到同一网络中。下面是在两个 Docker 主机上启动一个 Nginx 容器并将它们连接到 my-overlay-network 网络的示例代码。其中,--network 指定了网络名字,--name 指定了容器名字:

现在,两个 Nginx 容器在同一个虚拟网络中,它们可以通过该网络相互通信。

测试 overlay 网络模式

为了测试 overlay 网络是否正常工作,可以在其中一个容器中安装 curl 工具,然后从另外一个容器中访问该容器上运行的服务。下面是在 nginx-node1 容器中安装 curl 工具的命令:

然后,在 nginx-node2 容器中访问 nginx-node1 容器上运行的 Nginx 服务:

如果一切正常,将会看到 nginx-node1 容器上运行的 Nginx 服务的欢迎页面。

Iptables 网络模式

Iptables 网络模式是一种基于 iptables 规则来控制容器之间通信的方法。通过向容器绑定一条 iptables 规则,可以限制容器之间的网络通信。这种网络模式适用于需要控制容器间通信的场景,比如在安全性要求较高的环境中。

使用 iptables 网络模式

使用 iptables 网络模式需要在 Docker 初始时指定 --iptables 参数。下面是启动一个单节点 Docker 并指定启用 iptables 的示例命令:

然后,可以在运行容器时指定 --iptables 参数来为容器创建 iptables 规则。下面是启动一个名为 nginx-iptables 的容器并为它创建 iptables 规则的示例代码:

上面的代码创建了两条 iptables 规则,将容器 nginx-iptables 在容器内所有对外部的 HTTP 和 HTTPS 通信阻止。

测试 iptables 网络模式

为了测试 iptables 规则是否正常工作,可以在启动容器时加上 --interactive-i)和--tty-t)参数来进入容器内部的 shell,然后使用 ping 命令测试容器之间的连通性。下面是进入 nginx-iptables 容器并使用 ping 命令测试 google.com 是否可以访问的示例命令:

如果 iptables 规则有效,则无法访问外部网络。

总结

本文章介绍了 Docker 中的两种网络模式:overlay 和 iptables。overlay 网络模式适用于跨主机容器之间的通信和负载均衡,而 iptables 网络模式适用于需要控制容器间通信的场景。在实际应用中,应根据具体的应用场景选择合适的网络模式。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650159fe95b1f8cacdf15aaf

纠错
反馈