searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

实验:模拟flannel网络环境

2025-06-06 08:26:36
0
0

信息收集

服务A:

[root@r130 ~]# 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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:56:de:30 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.181.130/24 brd 192.168.181.255 scope global dynamic noprefixroute ens160
       valid_lft 1057sec preferred_lft 1057sec
    inet6 fe80::20c:29ff:fe56:de30/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

服务器B:

[root@r131 ~]# 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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:7b:48:72 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.181.131/24 brd 192.168.181.255 scope global dynamic noprefixroute ens160
       valid_lft 927sec preferred_lft 927sec
    inet6 fe80::20c:29ff:fe7b:4872/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

基础配置

# ipv4转发是必须的
sysctl -w net.ipv4.ip_forward=1

# 不是必须的,执行下避免引起不必要的问题
sysctl -w net.ipv4.conf.all.rp_filter=0
setenforce 0

在服务器A上模拟同服务器pod通信

企业微信截图_5a680751-cbf6-4f8b-83a3-f2b8df616a72.png

服务器A,创建网桥:

# 创建一个Linux Bridge,命名为cni0
sudo ip link add cni0 type bridge
sudo ip link set cni0 up
# 为桥分配一个IP地址(模拟CNI的网段)
sudo ip addr add 10.244.1.1/24 dev cni0

服务器A,创建pod1:

# 创建veth pair,一端连接Pod,一端连接桥
sudo ip link add veth-pod1 type veth peer name veth-br1
# 将veth-br1连接到cni0
sudo ip link set veth-br1 master cni0
sudo ip link set veth-br1 up
# 创建一个网络命名空间,模拟Pod
sudo ip netns add pod1
# 将veth-pod1放入Pod的网络命名空间
sudo ip link set veth-pod1 netns pod1
# 在Pod命名空间中配置veth-pod1
sudo ip netns exec pod1 ip link set veth-pod1 up
sudo ip netns exec pod1 ip addr add 10.244.1.2/24 dev veth-pod1
# 设置默认路由
sudo ip netns exec pod1 ip route add default via 10.244.1.1

服务器A, 创建pod2:

sudo ip link add veth-pod2 type veth peer name veth-br2
sudo ip link set veth-br2 master cni0
sudo ip link set veth-br2 up
sudo ip netns add pod2
sudo ip link set veth-pod2 netns pod2
sudo ip netns exec pod2 ip link set veth-pod2 up
sudo ip netns exec pod2 ip addr add 10.244.1.3/24 dev veth-pod2
sudo ip netns exec pod2 ip route add default via 10.244.1.1

通信测试:

# pod1 ping pod2
sudo ip netns exec pod1 ping 10.244.1.3 -c 6
# pod2 ping pod1
sudo ip netns exec pod2 ping 10.244.1.2 -c 6

模拟pod跨服务器通信

企业微信截图_fea9e48f-eed7-4e2f-a4c7-b476590cae73.png

服务器B,创建网桥:

sudo ip link add cni0 type bridge
sudo ip link set cni0 up
sudo ip addr add 10.244.2.1/24 dev cni0

服务器B, 创建pod1:

sudo ip link add veth-pod1 type veth peer name veth-br1
sudo ip link set veth-br1 master cni0
sudo ip link set veth-br1 up
sudo ip netns add pod1
sudo ip link set veth-pod1 netns pod1
sudo ip netns exec pod1 ip link set veth-pod1 up
sudo ip netns exec pod1 ip addr add 10.244.2.2/24 dev veth-pod1
sudo ip netns exec pod1 ip route add default via 10.244.2.1
sudo ip netns exec pod1 ip link set lo up

服务器A,配置vxlan:

sudo ip link add flannel.1 type vxlan id 1 local 192.168.181.130 dstport 4789 dev ens160
# flannel.1 绑定到网桥 cni0
sudo ip link set flannel.1 master cni0
# 配置vxlan ip
sudo ip addr add 10.244.1.0/24 dev flannel.1
sudo ip link set flannel.1 up

服务器B,配置vxlan:

sudo ip link add flannel.1 type vxlan id 1 local 192.168.181.131 dstport 4789 dev ens160
sudo ip link set flannel.1 master cni0
sudo ip addr add 10.244.2.0/24 dev flannel.1
sudo ip link set flannel.1 up

服务器A,配置路由与ARP:

# pod1 路由
sudo ip netns exec pod1 ip route add 10.244.2.0/24 via 10.244.1.1 dev veth-pod1
# pod2 路由
sudo ip netns exec pod2 ip route add 10.244.2.0/24 via 10.244.1.1 dev veth-pod2
# 主机路由
sudo ip route add 10.244.2.0/24 via 10.244.2.0 dev flannel.1 onlink

# 添加为服务器B上vxlan设备flannel.1的ip和mac地址到 arp (10.244.2.0 36:72:3b:07:a8:21 为服务器B上vxlan设备flannel.1的ip和mac地址)。告诉 flannel.1, 10.244.2.0 的 mac 地址是 36:72:3b:07:a8:21
# 有多个节点的话,都要添加。
sudo ip neigh add 10.244.2.0 lladdr 36:72:3b:07:a8:21 dev flannel.1 nud permanent

# 配置 bridge fdb,告诉 flannel.1 到 36:72:3b:07:a8:21 的走  192.168.181.131
# 有多个节点的话,要加多条。 
sudo bridge fdb append to 36:72:3b:07:a8:21 dst 192.168.181.131 dev flannel.1

服务器B,配置路由与ARP:

sudo ip netns exec pod1 ip route add 10.244.1.0/24 via 10.244.2.1 dev veth-pod1
sudo ip route add 10.244.1.0/24 via 10.244.1.0 dev flannel.1 onlink
sudo ip neigh add 10.244.1.0 lladdr 4a:ec:4b:9a:6c:07 dev flannel.1 nud permanent
sudo bridge fdb append to 4a:ec:4b:9a:6c:07 dst 192.168.181.130 dev flannel.1

服务器A,通信测试,服务器A-pod1 -> 服务器B-pod1

sudo ip netns exec pod1 ping 10.244.2.2

服务器B,通信测试,服务器B-pod1 -> 服务器A-pod1

sudo ip netns exec pod1 ping 10.244.1.2

清理

ip link del flannel.1
ip netns del pod1
ip netns del pod2
0条评论
0 / 1000
李****彬
1文章数
0粉丝数
李****彬
1 文章 | 0 粉丝
李****彬
1文章数
0粉丝数
李****彬
1 文章 | 0 粉丝
原创

实验:模拟flannel网络环境

2025-06-06 08:26:36
0
0

信息收集

服务A:

[root@r130 ~]# 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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:56:de:30 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.181.130/24 brd 192.168.181.255 scope global dynamic noprefixroute ens160
       valid_lft 1057sec preferred_lft 1057sec
    inet6 fe80::20c:29ff:fe56:de30/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

服务器B:

[root@r131 ~]# 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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:7b:48:72 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.181.131/24 brd 192.168.181.255 scope global dynamic noprefixroute ens160
       valid_lft 927sec preferred_lft 927sec
    inet6 fe80::20c:29ff:fe7b:4872/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

基础配置

# ipv4转发是必须的
sysctl -w net.ipv4.ip_forward=1

# 不是必须的,执行下避免引起不必要的问题
sysctl -w net.ipv4.conf.all.rp_filter=0
setenforce 0

在服务器A上模拟同服务器pod通信

企业微信截图_5a680751-cbf6-4f8b-83a3-f2b8df616a72.png

服务器A,创建网桥:

# 创建一个Linux Bridge,命名为cni0
sudo ip link add cni0 type bridge
sudo ip link set cni0 up
# 为桥分配一个IP地址(模拟CNI的网段)
sudo ip addr add 10.244.1.1/24 dev cni0

服务器A,创建pod1:

# 创建veth pair,一端连接Pod,一端连接桥
sudo ip link add veth-pod1 type veth peer name veth-br1
# 将veth-br1连接到cni0
sudo ip link set veth-br1 master cni0
sudo ip link set veth-br1 up
# 创建一个网络命名空间,模拟Pod
sudo ip netns add pod1
# 将veth-pod1放入Pod的网络命名空间
sudo ip link set veth-pod1 netns pod1
# 在Pod命名空间中配置veth-pod1
sudo ip netns exec pod1 ip link set veth-pod1 up
sudo ip netns exec pod1 ip addr add 10.244.1.2/24 dev veth-pod1
# 设置默认路由
sudo ip netns exec pod1 ip route add default via 10.244.1.1

服务器A, 创建pod2:

sudo ip link add veth-pod2 type veth peer name veth-br2
sudo ip link set veth-br2 master cni0
sudo ip link set veth-br2 up
sudo ip netns add pod2
sudo ip link set veth-pod2 netns pod2
sudo ip netns exec pod2 ip link set veth-pod2 up
sudo ip netns exec pod2 ip addr add 10.244.1.3/24 dev veth-pod2
sudo ip netns exec pod2 ip route add default via 10.244.1.1

通信测试:

# pod1 ping pod2
sudo ip netns exec pod1 ping 10.244.1.3 -c 6
# pod2 ping pod1
sudo ip netns exec pod2 ping 10.244.1.2 -c 6

模拟pod跨服务器通信

企业微信截图_fea9e48f-eed7-4e2f-a4c7-b476590cae73.png

服务器B,创建网桥:

sudo ip link add cni0 type bridge
sudo ip link set cni0 up
sudo ip addr add 10.244.2.1/24 dev cni0

服务器B, 创建pod1:

sudo ip link add veth-pod1 type veth peer name veth-br1
sudo ip link set veth-br1 master cni0
sudo ip link set veth-br1 up
sudo ip netns add pod1
sudo ip link set veth-pod1 netns pod1
sudo ip netns exec pod1 ip link set veth-pod1 up
sudo ip netns exec pod1 ip addr add 10.244.2.2/24 dev veth-pod1
sudo ip netns exec pod1 ip route add default via 10.244.2.1
sudo ip netns exec pod1 ip link set lo up

服务器A,配置vxlan:

sudo ip link add flannel.1 type vxlan id 1 local 192.168.181.130 dstport 4789 dev ens160
# flannel.1 绑定到网桥 cni0
sudo ip link set flannel.1 master cni0
# 配置vxlan ip
sudo ip addr add 10.244.1.0/24 dev flannel.1
sudo ip link set flannel.1 up

服务器B,配置vxlan:

sudo ip link add flannel.1 type vxlan id 1 local 192.168.181.131 dstport 4789 dev ens160
sudo ip link set flannel.1 master cni0
sudo ip addr add 10.244.2.0/24 dev flannel.1
sudo ip link set flannel.1 up

服务器A,配置路由与ARP:

# pod1 路由
sudo ip netns exec pod1 ip route add 10.244.2.0/24 via 10.244.1.1 dev veth-pod1
# pod2 路由
sudo ip netns exec pod2 ip route add 10.244.2.0/24 via 10.244.1.1 dev veth-pod2
# 主机路由
sudo ip route add 10.244.2.0/24 via 10.244.2.0 dev flannel.1 onlink

# 添加为服务器B上vxlan设备flannel.1的ip和mac地址到 arp (10.244.2.0 36:72:3b:07:a8:21 为服务器B上vxlan设备flannel.1的ip和mac地址)。告诉 flannel.1, 10.244.2.0 的 mac 地址是 36:72:3b:07:a8:21
# 有多个节点的话,都要添加。
sudo ip neigh add 10.244.2.0 lladdr 36:72:3b:07:a8:21 dev flannel.1 nud permanent

# 配置 bridge fdb,告诉 flannel.1 到 36:72:3b:07:a8:21 的走  192.168.181.131
# 有多个节点的话,要加多条。 
sudo bridge fdb append to 36:72:3b:07:a8:21 dst 192.168.181.131 dev flannel.1

服务器B,配置路由与ARP:

sudo ip netns exec pod1 ip route add 10.244.1.0/24 via 10.244.2.1 dev veth-pod1
sudo ip route add 10.244.1.0/24 via 10.244.1.0 dev flannel.1 onlink
sudo ip neigh add 10.244.1.0 lladdr 4a:ec:4b:9a:6c:07 dev flannel.1 nud permanent
sudo bridge fdb append to 4a:ec:4b:9a:6c:07 dst 192.168.181.130 dev flannel.1

服务器A,通信测试,服务器A-pod1 -> 服务器B-pod1

sudo ip netns exec pod1 ping 10.244.2.2

服务器B,通信测试,服务器B-pod1 -> 服务器A-pod1

sudo ip netns exec pod1 ping 10.244.1.2

清理

ip link del flannel.1
ip netns del pod1
ip netns del pod2
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0