Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker GCP计算实例NIC处于混杂模式_Docker_Google Cloud Platform_Macvlan - Fatal编程技术网

Docker GCP计算实例NIC处于混杂模式

Docker GCP计算实例NIC处于混杂模式,docker,google-cloud-platform,macvlan,Docker,Google Cloud Platform,Macvlan,我在GCP的Ubuntu实例上添加了一个macvlan docker网络。但是,我无法从实例访问。我想可能有一个限制,强制每个实例只有一个MAC 有人知道这件事或者有解决办法吗?是否有办法查看GCP网关端的arp/mac表的外观 我的意图是为docker使用macvlan网络,docker使用来自实例主网络的辅助IP地址 更多详情: 我为一个VM实例分配了一个辅助IP范围。 e、 g.虚拟机内部IP(主):10.10.10.2/24,虚拟机辅助IP范围:10.10.11.0/24 GCP将VM次

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

有人知道这件事或者有解决办法吗?是否有办法查看GCP网关端的arp/mac表的外观

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

更多详情: 我为一个VM实例分配了一个辅助IP范围。 e、 g.虚拟机内部IP(主):10.10.10.2/24,虚拟机辅助IP范围:10.10.11.0/24

GCP将VM次要范围路由到VM IP地址。我通过使用IP 10.10.11.2创建一个测试环回,并从同一VPC中的不同VM访问该IP来测试这一点。成功了

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

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

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


主机VM上的辅助范围IP与驻留在MAVLAN网络中的docket容器上的IP之间的唯一区别在于,容器使用的MAC与主机VM不同。

解决方案将取决于您尝试实现的功能类型

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

2-如果您想将IP(作为单个VPC中的辅助子网范围)分配给一个容器,并使流量能够路由到该容器和从该容器中路由,那么这在概念上非常类似于。虽然IP伪装通常在Google Kubernetes Engine()中使用,但IP伪装代理可以为VM的容器执行相同的任务。IP伪装本质上导致容器的源IP在GCP VM的vNIC上被“源NAT”。这意味着在GCP网络上从您的容器路由的所有流量将显示为将您的GCP VMs vNIC IP作为源IP


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

您指的是辅助Google VPC IP地址吗?那不行。每个NIC一个MAC地址和一个IP地址。“GCP的网关端”是什么意思?是的。我在原来的帖子中添加了更多细节。选项2类似于Docker网络类型“Bridge”。然而,这不是我需要的。我希望通过主机NIC从MAVLAN网络直接访问物理网络。在非云环境中,这是可能的。我正试图在GCP中实现同样的目标。您的要求是否与源IP是macvlan容器的IP有关?可能适合您的事情包括使用GKE群集。创建集群时,需要将其设置为VPC本机。对于VPC本机:“[容器]IP地址可在集群的VPC网络和通过VPC网络对等连接到它的其他VPC网络中本机路由。”这意味着您可以在流量保持连接到VPC的同时保留源IP。如果您还要求容器创建由macvlan+Docker完成,那么这可能不起作用。目前没有其他方法可以保存容器的源IP并使其可路由。我正在阅读GKE networking的技术文档,但没有找到任何关于容器IP直接路由的内容。在GKE设计中,吊舱可能有多个容器。容器中的服务由Pod IP使用DNAT公开。但是,无法访问Pod中单个容器的IP地址。e、 g.要访问Pod中特定容器提供的服务,我必须访问PodIP:ServicePort,它会将我转发到正确的容器。我想做的是直接使用节点上的Pod后面的容器的IP地址访问它。