跳到主要内容

容器网络配置

PubSub+软件事件代理可以作为有根或无根容器运行。由于非特权用户无法在主机上创建网络接口,容器是作为根用户还是非根用户运行是网络配置中最重要的考虑因素。这决定了无法使用的网络模式。影响网络的其他因素包括需要连接到容器的客户端数量、容器是否需要相互通信,以及环境中的安全限制。

以下部分描述了PubSub+软件事件代理容器支持的网络模式,并提供了一些可能有用的额外信息链接:

Solace不支持在PubSub+软件事件代理容器中使用HTTP_PROXYHTTPS_PROXY环境变量。请不要在您的PubSub+软件事件代理容器中使用这些变量。

有根模式

有根模式是大多数容器运行时环境的默认设置,在这种模式下,大多数容器运行时环境(包括Docker和Podman)默认创建一个桥接网络。容器运行时环境在内部桥接网络上为容器创建一个接口,然后使用网络地址转换(NAT)连接到其他网络(或互联网)。除非另有说明,所有容器都连接到该桥接网络。使用桥接网络时,您必须提供容器和主机之间的端口映射。

由于所有容器都连接到同一个网络,您必须配置端口映射,以确保它们在主机端口空间中不发生冲突。

有根容器的另一个选项是主机网络。对于这种网络模式,您在启动容器时指定--network=host标志。所有容器端口都暴露在主机上。主机模式消除了容器和主机之间的网络隔离,并直接使用主机的网络。

由于不需要网络地址转换(NAT),主机模式网络可以在容器需要处理大量端口时优化性能。

无根模式

对于无根Podman,默认网络配置是slirp4netnsslirp4netns包为非根用户提供用户模式网络。它从主机到容器创建一个隧道以转发流量。使用slirp4netns时,容器彼此完全隔离。没有虚拟网络,因此为了相互通信,容器可以使用与主机系统的端口映射,或者它们可以被放入Pod中,共享相同的网络命名空间。

Podman支持两个端口处理器:

  • port_handler=rootlesskit:使用rootlesskit进行端口转发。这是默认的端口处理器。

我们推荐使用slirp4netns端口处理器,这不是默认设置(即,您必须在创建容器时指定port_handler=slirp4netns)。这是因为PubSub+事件代理需要知道源IP地址,但是rootlesskit会将传入数据包的源IP地址更改为容器网络命名空间中的IP地址(通常是10.0.2.100)。

  • port_handler=slirp4netns:使用slirp4netns端口转发。这个端口处理器保留了正确的源IP地址。

由于Podman v4.0.2中已知的问题,当使用slirp4netns端口处理器映射冗余服务端口范围时,无根容器部署的事件代理冗余无法成功启动。这个问题已在Podman v4.0.3中修复。

Podman还支持无根容器的主机模式(--net=host)。请注意,使用主机网络模式运行的无根容器,后续的podman exec命令将不会加入主机网络命名空间,因为它由root拥有。

支持的网络选项总结

下表列出了PubSub+软件事件代理容器支持的有根和无根模式的网络选项。

模式支持的网络驱动详细信息
有根bridge包括Docker和Podman在内的大多数运行时环境在有根模式下的默认网络模式。
host消除容器和主机之间的网络隔离,并直接使用主机的网络。\<br>\仅支持每个容器一个物理接口。\<br>为了最佳性能,建议尽可能使用host网络驱动,特别是在有大量客户端连接的使用场景中。
无根host消除容器和主机之间的网络隔离,并直接使用主机的网络。\<br>注意:主机模式使容器可以完全访问本地系统服务,如D-bus,因此被认为是不安全的。
slirp4netns提供非特权网络命名空间的用户模式网络。这是无根Podman的默认设置。

下一步

有关Podman容器网络的更多信息,请参阅:

  • Podman的基本网络指南
  • 使用Podman配置容器网络(Red Hat文档)
  • 无根Podman的不足

有关Docker容器网络的更多信息,请参阅:

  • 网络概述(Docker文档)

有关无根容器的详细讨论,请参阅:

  • 无根容器