2

我在 GCP 的 Ubuntu 实例上添加了一个 macvlan docker 网络。但是我无法访问/从实例。我想也许有一个限制,每个实例只强制执行一个 MAC。

任何人都知道这一点或有解决方法吗?有没有办法在 GCP 的网关端查看 arp/mac 表的外观?

我的意图是为使用实例主网络的辅助 IP 地址的 docker 使用 macvlan 网络。

更多详细信息:我为 VM 实例分配了辅助 IP 范围。例如 VM 内部 IP(主要):10.10.10.2/24,VM 次要 IP 范围:10.10.11.0/24

GCP 将虚拟机次要范围路由到虚拟机 IP 地址。我通过使用 IP 10.10.11.2 创建一个测试环回并从同一 VPC 中的不同 VM 访问此 IP 来对此进行测试。有效。

在下一步中,我删除了那个虚假的环回并使用 IP 地址为 10.10.11.2 的 macvlan 网络安装了一个独立的 docker 容器。

我期待连接到这个 macvlan 网络的新容器可以通过具有容器的 MAC 和 IP 地址(10.10.11.2)的 VM ens4 接口访问。

根据文档,这就是 macvlan 网络所做的。它通过为 macvlan 网络中的每个容器使用新的 MAC 地址,将 macvlan 网络与主机网络完全隔离。

主机 VM 上的辅助范围 IP 和驻留在 macvlan 网络中的案卷容器上的 IP 之间的唯一区别是容器使用的 MAC 与主机 VM 不同。

4

1 回答 1

1

解决方案将取决于您要实现的功能类型。

1 - 如果您在单个 VM 上需要两个可单独访问的 IP,则需要使用两个 vNIC(虚拟网络接口)重新创建 VM。添加额外的 vNIC只能在 VM 创建期间完成,并且第二个 vNIC 也必须位于不同的 VPC 上。

2 - 如果您想将 IP(作为单个 VPC 中的辅助子网范围)分配给容器并让流量可路由进出该容器,那么这在概念上与Kubernetes IP Masquerading非常相似。虽然 IP 伪装通常在 Google Kubernetes Engine ( GKE ) 中使用,但 ip-masq-agent 可以为您的 VM 容器执行相同的任务。IP 伪装本质上会导致容器的源 IP 在 GCP VM 的 vNIC 上被“源 NAT”。这意味着从 GCP 网络上的容器路由的所有流量都将以您的 GCP 虚拟机 vNIC IP 作为源 IP。

对于选项 2,伪装是一项要求,因为默认情况下,VM 无法转发由另一个 VM 发起的数据包。作为第一步,在虚拟机创建期间必须在 vNIC 上启用IP 转发(只能在虚拟机创建期间启用)。然后,要为您的容器启用 IP 伪装,请执行将 VM 配置为 NAT 网关的步骤 7 和 8 。

于 2020-01-06T16:18:28.923 回答