问题标签 [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.
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 网络的命令。
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 有什么好处?
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 界面中做到这样的“包罗万象” ?
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 不起作用。
没有防火墙规则阻止通信。
你知道我做错了什么吗?
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?
谢谢
linux - 在 Linux 网络命名空间中以桥接模式从 MACVLAN 访问外部
我的最终目标:我想在我的树莓派上运行一些使用 VPN 连接的应用程序。所有其他应用程序应直接连接到互联网,无需 VPN。我希望能够灵活地与不同的 VPN 提供商合作。
在将它应用到我的 Raspberry Pi 之前,我正在运行 Ubuntu 20.04 LTS 的虚拟机上进行测试。
我的做法:
- 创建网络命名空间。
- 命名空间中虚拟适配器的 IP 地址应该是动态的(来自路由器的 dhcp)。在研究 dhcp 细节之前,我将开始使用静态 IP 进行测试。
- 1. 和 2. 运行并连接网络命名空间中的 vpn 客户端。
- 在网络命名空间中运行应用程序。
我已阅读虚拟网络的 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 地址。