问题标签 [macvlan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
50 浏览

docker - Docker 容器使用特定的网络接口

我目前有两个网卡 ens192 10.0.0.0/24 和 ens224 10.10.0.0/24。目前 docker 使用的是 ens192。我有几个容器,我想使用 ens224,这样它们的流量就会通过不同的网关路由。

我尝试使用 10.10.0.0/24 子网的 macvlan,父接口设置为 ens224。然后我将它附加到容器,但无法访问该子网上的任何内容。

也许这是不可能的,或者我走错了路。任何帮助,将不胜感激。

这是我用来创建 macvlan 网络的命令。

0 投票
0 回答
66 浏览

docker - Docker 桥接网络已经分配了 MAC,那么 macvlan 是什么?

我一直在阅读文档:

一些 SOF 问题,例如Docker 如何将 MAC 地址分配给容器?

和其他一些网站,试图了解 macvlan 存在的确切原因。在这些文档中,它指出您可以看到分配给连接到 macvlan 网络的容器的 MAC 地址。

我这样做:

然后我在它上面启动一个 pod,它得到这个 MAC:02:42:ac:10:56:02

但是如果我启动一个连接到桥接网络的容器,它也会获得一个 MAC 地址:02:42:ac:12:00:02

我看到的唯一区别是 macvlan 网络没有创建任何网络接口,也无法访问互联网。

如果桥接网络确实为容器分配 MAC 地址,那么 macvlan 有什么好处?

0 投票
0 回答
31 浏览

bridge - macvlan接口的promisc模式是什么意思?“ip 链接设置 macvlan0 promisc on”

我了解 macvlan 的全部目的是在 NIC 上安装额外的单播 MAC(如果支持),因此 NIC 和传统网桥都不需要 promisc 模式。这样 NIC 可以接收多个 Dest MAC = [NIC's primary MAC, additional unicast MACs]

所以如果我在bond0上创建一个macvlan接口,我是否可以在这个macvlan接口上打开promisc模式来捕获bond0上收到的所有未知单播/多播数据包?我理解的 rx 路径是:

我试过了

但除了 macvlan0 配置的 MAC 地址外,我无法接收数据包。

有没有办法可以在 macvlan 界面中做到这样的“包罗万象” ?

0 投票
0 回答
292 浏览

kubernetes - Kubernetes 网络附件定义

目前我正在运行一个 Kubernetes 集群。

主机网络:10.17.20.x Docker 网络:172.17.60.x

我正在运行一个具有 IP 的 RabbitMQ pod:172.17.60.217 注释:

  • cni.projectcalico.org/podIP:172.17.60.217/32 cni.projectcalico.org/podIPs:172.17.60.217/32

我所有的 pod 都需要连接到 RabbitMQ。这工作得很好。我需要将 pod“A”作为 macvlan 运行,因为它需要可以从主机网络访问以进行外围设备。

所以从拓扑的角度来看。我的 pod "A" 需要有两个网络接口才能连接到 rabbitmq 172.17.60.217 并获得分配的 Hostnetwork IP。因此提出了 NetworkAttachmentDefinitions。我的计划是创建一个 NetworkAttachment 来从 Hostnetwork 分配一个 IP。

似乎IP分配正确。

kubectl 描述 pod udpechoroute

[root@openstack1]# kubectl exec -it udpechoroute /bin/sh -- 路由

[root@openstack1]# kubectl exec -it udpechowithoutan /bin/sh -- 路由

我的问题:我删除了一个不使用任何 NetworkAttachmentDefinition 的 Pod,以便了解该 pod 的网关信息。但是从我的 udpechoroute Pod 我可以 ping RabbitMQ 地址,但无法从 IP 10.17.20.124 上的外围访问它。

kubectl exec -it udpechoroute -- ping 172.17.60.217:

从 10.17.20.x 到 10.17.20.124 的 Ping 不起作用。

没有防火墙规则阻止通信。

你知道我做错了什么吗?

0 投票
0 回答
64 浏览

kubernetes - 使用 VLAN 标头跨主机的基于 IPVLAN CNI 的 Pod

我在 Kubernetes 集群中有 2 个工作节点。工作节点位于同一个 L2 域上。

Worker-node0 上的 Pod00 正在使用 IPVLAN。所以,net1 得到 10.1.1.1

Worker-node1 上的 Pod01 正在使用 IPVLAN。所以,net1 得到 10.1.1.2

我希望能够 ping 10.1.1.1 <---> 10.1.1.2 并且它应该带有 VLAN 标头。我在 tcpdump 中看不到任何内容。问题:

  • 我假设 VLAN 标头是由 Pod 本身插入的。但是,在 IPVLAN CNI 中,我看不到任何通过配置获取 VLAN 信息的代码。我的理解正确吗?

  • 应该将 pod 中的接口显式配置为 vlan-subinterfaces (net1.10) 还是应该在工作节点 (enp1s0.10) 上进行配置?

  • 我应该使用什么作为“主”界面?enp1s0 还是 enp1s0.10?

谢谢

0 投票
0 回答
21 浏览

linux - 在 Linux 网络命名空间中以桥接模式从 MACVLAN 访问外部

我的最终目标:我想在我的树莓派上运行一些使用 VPN 连接的应用程序。所有其他应用程序应直接连接到互联网,无需 VPN。我希望能够灵活地与不同的 VPN 提供商合作。

在将它应用到我的 Raspberry Pi 之前,我正在运行 Ubuntu 20.04 LTS 的虚拟机上进行测试。

我的做法:

  1. 创建网络命名空间。
  2. 命名空间中虚拟适配器的 IP 地址应该是动态的(来自路由器的 dhcp)。在研究 dhcp 细节之前,我将开始使用静态 IP 进行测试。
  3. 1. 和 2. 运行并连接网络命名空间中的 vpn 客户端。
  4. 在网络命名空间中运行应用程序。

我已阅读虚拟网络的 Linux 接口简介,并相信 MACVLAN 是正确的方法。我创建了以下脚本来设置命名空间和虚拟网络:

运行脚本后,创建了命名空间,我可以 ping 10.11.12.200(虚拟接口的 IP 地址)。当我尝试 ping 网关10.11.12.1时,我得到Destination Host Unreachable.

我是这么想的,eth0现在macvlanvpn应该桥接。我错过了什么?

eth0有 IP 地址10.11.12.101,由 dhcp 分配。网关和 dhcp 服务器是10.11.12.1.

我也试过了mode passthru。当我尝试时,我可以访问网关和互联网。这个解决方案有一些缺点。它在硬件和虚拟接口上使用相同的 MAC 地址。当我使用ip命令更改MAC地址时,另一个的MAC地址也被更改。因此我不能使用 dhcp 来分配 IP 地址。