ovn 普通静态路由优先于ecmp bfd 静态路由

359 阅读4分钟

ovn 普通静态路由优先于ecmp bfd 静态路由

如下是关于静态路由和ecmp 基于bfd静态路由的测试,当两者共存时,你会发现,普通静态路由,优先于ecmp bfd静态路由

1. 目前存在两种静态路由,这两种静态路由都可以出公网



# k ko nbctl lr-route-list vpc2
IPv4 Routes
Route Table <main>:
           192.168.0.0/24              10.5.204.108 src-ip ecmp ecmp-symmetric-reply bfd
           192.168.0.0/24              10.5.204.109 src-ip ecmp ecmp-symmetric-reply bfd
           192.168.0.0/24              10.5.204.121 src-ip ecmp ecmp-symmetric-reply bfd
                0.0.0.0/0              10.5.204.254 dst-ip



# 可以看到vpc内部的pod是通过普通静态路由出去的


[root@pc-node-1 ~]# k exec -it -n vpc2            vpc-1-busybox01     bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
[root@vpc-1-busybox01 /]#
[root@vpc-1-busybox01 /]#
[root@vpc-1-busybox01 /]# 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
215833: eth0@if215834: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 00:00:00:be:bf:c7 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::200:ff:febe:bfc7/64 scope link
       valid_lft forever preferred_lft forever
[root@vpc-1-busybox01 /]# ping 223.5.5.5
PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data.
64 bytes from 223.5.5.5: icmp_seq=1 ttl=114 time=23.1 ms
64 bytes from 223.5.5.5: icmp_seq=2 ttl=114 time=23.0 ms
^C
--- 223.5.5.5 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 23.058/23.103/23.149/0.158 ms
[root@vpc-1-busybox01 /]# tracepath -n 223.5.5.5
 1?: [LOCALHOST]                                         pmtu 1500
 1:  192.168.0.1                                           0.598ms asymm  2
 1:  192.168.0.1                                           0.348ms asymm  2
 2:  10.5.204.254                                          1.512ms # 注意这一跳
 3:  202.109.248.193                                       2.792ms
 4:  117.30.27.33                                          8.072ms
 5:  218.85.141.133                                        5.779ms asymm  4
 6:  61.154.236.5                                          6.429ms
 7:  202.97.100.217                                       20.525ms
 8:  no reply
 9:  no reply
10:  180.163.53.74                                        31.939ms
11:  116.251.88.154                                       21.910ms asymm 13
12:  116.251.116.81                                       22.668ms

2. 将普通静态路由删除,可以看到才会基于ecmp 静态路由出去



[root@vpc-1-busybox01 /]# ping 223.5.5.5
PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data.
64 bytes from 223.5.5.5: icmp_seq=1 ttl=114 time=23.4 ms
64 bytes from 223.5.5.5: icmp_seq=2 ttl=114 time=23.0 ms
^C
--- 223.5.5.5 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 23.067/23.253/23.440/0.240 ms
[root@vpc-1-busybox01 /]# tracepath -n 223.5.5.5
 1?: [LOCALHOST]                                         pmtu 1500
 1:  192.168.0.1                                           0.611ms asymm  2
 1:  192.168.0.1                                           0.332ms asymm  2
 2:  no reply
 3:  no reply

# 可以看到是没有基于 10.5.204.254   直接出去

[root@pc-node-1 ~]# tcpdump -i ovnext0 host 223.5.5.5 -netvv
dropped privs to tcpdump
tcpdump: listening on ovnext0, link-type EN10MB (Ethernet), capture size 262144 bytes







^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel
[root@pc-node-1 ~]# exit
[root@pc-node-1 ~]# ip netns exec ovnext bash^C
[root@pc-node-1 ~]# ssh pc-node-2
Last login: Mon Feb 20 08:07:05 2023 from 10.5.32.51
[root@pc-node-2 ~]#  ip netns exec ovnext bash
[root@pc-node-2 ~]#
[root@pc-node-2 ~]#
[root@pc-node-2 ~]#  tcpdump -i ovnext0 host 223.5.5.5 -netvv
dropped privs to tcpdump
tcpdump: listening on ovnext0, link-type EN10MB (Ethernet), capture size 262144 bytes


^C
0 packets captured
1 packet received by filter
0 packets dropped by kernel
[root@pc-node-2 ~]# exit
[root@pc-node-2 ~]# logout
Connection to pc-node-2 closed.
[root@pc-node-1 ~]# ssh pc-node-3
Last login: Mon Feb 20 08:07:22 2023 from 10.5.32.51
[root@pc-node-3 ~]#  ip netns exec ovnext bash
[root@pc-node-3 ~]#  tcpdump -i ovnext0 host 223.5.5.5 -netvv
dropped privs to tcpdump
tcpdump: listening on ovnext0, link-type EN10MB (Ethernet), capture size 262144 bytes
00:00:00:2d:f8:ce > 00:00:00:fd:b2:a4, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 63, id 44808, offset 0, flags [DF], proto ICMP (1), length 84)
    10.5.204.111 > 223.5.5.5: ICMP echo request, id 111, seq 71, length 64
00:00:00:fd:b2:a4 > dc:ef:80:5a:44:1a, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 62, id 44808, offset 0, flags [DF], proto ICMP (1), length 84)
    10.5.204.111 > 223.5.5.5: ICMP echo request, id 111, seq 71, length 64
00:00:00:2d:f8:ce > 00:00:00:fd:b2:a4, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 63, id 45000, offset 0, flags [DF], proto ICMP (1), length 84)
    10.5.204.111 > 223.5.5.5: ICMP echo request, id 111, seq 72, length 64
00:00:00:fd:b2:a4 > dc:ef:80:5a:44:1a, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 62, id 45000, offset 0, flags [DF], proto ICMP (1), length 84)
    10.5.204.111 > 223.5.5.5: ICMP echo request, id 111, seq 72, length 64
^C
4 packets captured
4 packets received by filter
0 packets dropped by kernel


# 可以看到我有是哪个下一跳,目前是基于第三个节点出去的,这个是hash的结果