bridge veth netns

构建桥接网络:Veth+Bridge+NetNS在Kubernetes中的应用
本文详细介绍了如何在Kubernetes环境中利用veth-pair、bridge和网络命名空间创建网络连接,包括创建br0桥、配置IP、移动veth接口到命名空间并验证网络连通性。

bridge veth netns
1,创建br0
2,配置br0 网络,并启动
3,创建nns1 和nns2 的网络命名空间
4,创建veth对(veth10@veth11 veth20@veth21)
5,将veth中的veth10 veth20 加入到br0中
6,将veth中的veth11移动到nns1中,并配置ip,并启动
7,将veth中的veth21移动到nns2中,并配置ip,并启动
8,检查网络的连通性(nns1—br0;nns2—br0,nns1–nns2)

最终拓扑图
在这里插入图片描述

1,创建br0
[root@k8s-node1 ~]# brctl addbr br0
2,配置br0 网络,并启动
[root@k8s-node1 ~]# ip address add 172.16.0.1/16 dev br0
[root@k8s-node1 ~]# ip link set br0 up
[root@k8s-node1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:46:24:dd brd ff:ff:ff:ff:ff:ff
inet 192.168.0.61/24 brd 192.168.0.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe46:24dd/64 scope link
valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 52:c6:80:bd:93:fa brd ff:ff:ff:ff:ff:ff
inet 172.16.0.1/16 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::50c6:80ff:febd:93fa/64 scope link
valid_lft forever preferred_lft forever
[root@k8s-node1 ~]#

3,创建nns1 和nns2 的网络命名空间
[root@k8s-node1 ~]# ip netns add nns1
[root@k8s-node1 ~]# ip netns add nns2
[root@k8s-node1 ~]# ip netns list
nns2
nns1

4,创建veth对(veth10@veth11 veth20@veth21)
[root@k8s-node1 ~]# ip link add veth10 type veth peer name veth11
[root@k8s-node1 ~]# ip link add veth20 type veth peer name veth21
[root@k8s-node1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:46:24:dd brd ff:ff:ff:ff:ff:ff
inet 192.168.0.61/24 brd 192.168.0.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe46:24dd/64 scope link
valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 52:c6:80:bd:93:fa brd ff:ff:ff:ff:ff:ff
inet 172.16.0.1/16 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::50c6:80ff:febd:93fa/64 scope link
valid_lft forever preferred_lft forever
4: veth11@veth10: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether f2:c6:77:bb:5d:01 brd ff:ff:ff:ff:ff:ff
5: veth10@veth11: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 1a:9c:72:32:20:7f brd ff:ff:ff:ff:ff:ff
6: veth21@veth20: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 22:5e:a1:ac:42:7b brd ff:ff:ff:ff:ff:ff
7: veth20@veth21: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether d2:d1:2f:b5:d4:aa brd ff:ff:ff:ff:ff:ff

5,将veth中的veth10 veth20 加入到br0中
[root@k8s-node1 ~]# brctl addif br0 veth10
[root@k8s-node1 ~]# brctl addif br0 veth20
[root@k8s-node1 ~]# ip link set veth10 up
[root@k8s-node1 ~]# ip link set veth20 up
[root@k8s-node1 ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.1a9c7232207f no veth10
veth20

6,将veth中的veth11移动到nns1中,并配置ip,并启动
[root@k8s-node1 ~]# ip link set dev veth11 netns nns1
[root@k8s-node1 ~]# ip netns exec nns1 ip address add 172.16.0.10/16 dev veth11
[root@k8s-node1 ~]# ip netns exec nns1 ip link set veth11 up
[root@k8s-node1 ~]# ip netns exec nns1 ip a
1: lo: mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
4: veth11@if5: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default qlen 1000
link/ether f2:c6:77:bb:5d:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.16.0.10/16 scope global veth11
valid_lft forever preferred_lft forever

7,将veth中的veth21移动到nns2中,并配置ip,并启动
[root@k8s-node1 ~]# ip link set dev veth11 netns nns1
[root@k8s-node1 ~]# ip netns exec nns1 ip address add 172.16.0.10/16 dev veth11
[root@k8s-node1 ~]# ip netns exec nns1 ip link set veth11 up
[root@k8s-node1 ~]# ip netns exec nns1 ip a
1: lo: mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
4: veth11@if5: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default qlen 1000
link/ether f2:c6:77:bb:5d:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.16.0.10/16 scope global veth11
valid_lft forever preferred_lft forever
[root@k8s-node1 ~]# ip link set dev veth21 netns nns2
[root@k8s-node1 ~]# ip netns exec nns2 ip address add 172.16.0.21/16 dev veth21
[root@k8s-node1 ~]# ip netns exec nns2 ip link set veth21 up
[root@k8s-node1 ~]# ip netns exec nns2 ip a
1: lo: mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6: veth21@if7: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default qlen 1000
link/ether 22:5e:a1:ac:42:7b brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.16.0.21/16 scope global veth21
valid_lft forever preferred_lft forever

8,检查网络的连通性(nns1—br0;nns2—br0,nns1–nns2)
[root@k8s-node1 ~]# ip netns exec nns2 ping 172.16.0.1
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=0.040 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=64 time=0.081 ms

— 172.16.0.1 ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 1014ms
rtt min/avg/max/mdev = 0.040/0.060/0.081/0.021 ms
[root@k8s-node1 ~]# ip netns exec nns2 ping 172.16.0.10
PING 172.16.0.10 (172.16.0.10) 56(84) bytes of data.
64 bytes from 172.16.0.10: icmp_seq=1 ttl=64 time=0.045 ms
64 bytes from 172.16.0.10: icmp_seq=2 ttl=64 time=0.134 ms
64 bytes from 172.16.0.10: icmp_seq=3 ttl=64 time=0.100 ms

— 172.16.0.10 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2008ms
rtt min/avg/max/mdev = 0.045/0.093/0.134/0.036 ms
[root@k8s-node1 ~]# ip netns exec nns1 ping 172.16.0.20
PING 172.16.0.20 (172.16.0.20) 56(84) bytes of data.

— 172.16.0.20 ping statistics —
6 packets transmitted, 0 received, 100% packet loss, time 5022ms

[root@k8s-node1 ~]# ip netns exec nns2 ip a
1: lo: mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6: veth21@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 22:5e:a1:ac:42:7b brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.16.0.21/16 scope global veth21
valid_lft forever preferred_lft forever
inet6 fe80::205e:a1ff:feac:427b/64 scope link
valid_lft forever preferred_lft forever
[root@k8s-node1 ~]# ip netns exec nns1 ping 172.16.0.21
PING 172.16.0.21 (172.16.0.21) 56(84) bytes of data.
64 bytes from 172.16.0.21: icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from 172.16.0.21: icmp_seq=2 ttl=64 time=0.154 ms

在以太网中,`bridge`(网桥)是一种用于连接多个以太网段的设备,其核心功能是学习MAC地址并转发数据帧。`虚拟端口(VP)`和`传输端口(TP)`则是与网桥相关的逻辑或物理接口,它们在数据帧的转发过程中扮演不同角色。以下是它们之间的关系: ### 1. `bridge`与`VP`的关系 `bridge`可以包含多个端口,这些端口既可以是物理端口(如`eth0`),也可以是虚拟端口(`VP`)。虚拟端口通常是通过软件模拟的网络接口,例如`veth`对或`tap`设备。`bridge`通过将这些虚拟端口添加到其桥接列表中,使得这些虚拟端口能够与其他端口(包括物理端口和其他虚拟端口)进行通信。 例如,`veth`设备通常成对出现,一端连接到`bridge`,另一端连接到一个网络命名空间(`netns`)中的虚拟端口。这种配置允许不同命名空间中的虚拟网络设备通过`bridge`进行通信[^2]。 ### 2. `bridge`与`TP`的关系 `TP`(传输端口)通常指的是物理网络接口,例如`eth0`或`tap`设备,它们负责将数据帧从本地网络发送到外部网络,或者从外部网络接收数据帧。`TP`可以直接连接到`bridge`上,作为`bridge`的一部分,参与数据帧的转发过程。 在某些情况下,`TP`也可以是虚拟设备,例如`tap`设备,它模拟了以太网接口的行为,并能够处理以太网帧。当`TP`被添加到`bridge`中时,它与其他端口(包括`VP`)一起参与桥接过程,使得数据帧能够在不同端口之间转发。 ### 3. `VP`与`TP`的关系 `VP`和`TP`之间的关系主要体现在它们如何通过`bridge`进行数据帧的转发。`VP`通常是虚拟设备,用于连接不同的网络命名空间,而`TP`通常是物理设备或模拟物理设备的虚拟接口,负责数据帧的传输。在`bridge`中,`VP`和`TP`被平等对待,`bridge`根据MAC地址表决定数据帧从哪个端口转发出去。 例如,在一个包含`veth`对的环境中,`veth`的一端作为`VP`连接到`bridge`,另一端连接到一个网络命名空间中的虚拟设备,而`TP`作为物理接口连接到外部网络。当数据帧从`VP`进入`bridge`时,`bridge`会根据目标MAC地址决定是否通过`TP`将数据帧转发到外部网络。 ### 示例配置 以下是一个简单的配置示例,展示了如何将`veth`设备(作为`VP`)添加到`bridge`中: ```bash # 创建veth对 ip link add v1 type veth peer name vp1 # 创建bridge br0 brctl addbr br0 # 将vp1添加到bridge br0 brctl addif br0 vp1 # 启动接口 ip link set v1 up ip link set vp1 up ip link set br0 up ``` 在这个配置中,`v1`是`VP`,而`vp1`是另一个端口,它们通过`bridge`进行通信。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值