在 VMware ESXi 环境下启用跨主机容器通信

在 VMware ESXi 环境下启用跨主机容器通信

我有一组 CentOS 7.2 服务器,它们在 VMware 的 ESXi 6.0 下作为虚拟机运行。它们都位于同一个子网中,我们可以毫无问题地在不同的服务器之间进行通信。此外,这些服务器中的每一个都运行许多基于 libvirt 的 LXC 容器,这些容器也基于 CentOS 7.2。主机可以毫无问题地与它们的容器进行通信,并且给定服务器上的容器可以相互通信。但是,托管在两个不同服务器上的容器无法相互通信或与其他服务器通信。

当我们在真实硬件上复制此设置时,容器之间没有任何通信问题。同样,如果我们使用基于 KVM 的虚拟机而不是 ESXi 虚拟机复制设置,一切都会正常进行——无论哪个虚拟机托管容器,容器之间的通信都没有问题

在另一项测试中,我们配置了基于 AWS 的安装,容器在 AWS 实例下运行。在这种情况下,我们遇到了与 ESXi 相同的问题,即在不同主机(AWS 实例)上运行的容器无法相互通信。我们使用代理 arp 解决了 AWS 中的问题。具体来说,我们在每台服务器上设置了以下 CentOS 选项:

echo 1 > /proc/sys/net/ipv4/conf/br0/forwarding
echo 1 > /proc/sys/net/ipv4/conf/br0/proxy_arp_pvlan
echo 1 > /proc/sys/net/ipv4/conf/br0/proxy_arp
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/br0/send_redirects

配置这些后,在各种 AWS 实例下运行的容器能够顺利地相互通信,无论它们由谁托管。不幸的是,我们在基于 ESXi 的设置上尝试了同一组选项,但没有成功。我们发现的唯一解决方案是在我们在 vSphere 环境中定义的 vSwitch 上启用混杂模式。然而,这不是一个理想的解决方案,因为这意味着所有流量,无论它来自哪里,都被允许通过主机和容器。从安全角度来看,这并不理想。

所以问题是,这个问题能否通过我们在 AWS 上使用的代理 arp 解决方案来解决,还是有另一种完全不同的方法?正如我所提到的,我们基于 KVM 的集群不需要代理 arp 或混杂模式就可以工作,所以也许 ESXi 中有一些与 KVM 类似的东西。任何帮助都将不胜感激。

彼得

相关内容