linux内核在路由数据包时如何选择正确的src ip?

linux内核在路由数据包时如何选择正确的src ip?

我有一个使用 Calico 作为 CNI 插件的 kubernetes 集群。我们可以在我的本地路由表中获取一些路由,例如

root@k8s-master:~# ip r
default via 192.168.100.1 dev ens18 proto dhcp src 192.168.100.215 metric 100
10.222.235.232 dev cali5bda0fdd27a scope link  # route to pod
10.222.235.233 dev cali1209a63af2b scope link
10.222.235.235 dev cali12d4a061371 scope link
10.222.235.241 dev cali9d4dd01dda6 scope link
10.222.235.246 dev calid0a379e0710 scope link
10.222.235.248 dev cali67ee1300377 scope link

我的机器上有多个接口。我想知道linux内核在将数据包路由到pod时如何选择正确的src ip?

root@k8s-master:~# ip r get 10.222.235.232
10.222.235.232 dev cali5bda0fdd27a src 192.168.200.2 uid 0
    cache

cali5bda0fdd27a接口没有IP地址。它是主机网络命名空间中 veth 对的一端(另一端在容器网络命名空间中)。

192.168.200.2是另一个接口的ip。为什么linux内核选择192.168.200.2而不选择192.168.100.215

相关内容