求助,如何让 k8s 的 pod 访问外网的时候从指定网卡出去,求大神看看我这么配置为什么不行

2020-06-02 11:15:45 +08:00
 sniperking1234

pod 地址 10.151.163.151 外网网段 172.31.0.0/20

修改的方式为:

iptables -I PREROUTING -t mangle -s 10.151.163.151 -d 172.31.0.0/20 -j MARK --set-mark 100

ip r add table 3 172.31.0.0/20 dev eth4 proto kernel scope link src 172.31.0.72

ip rule add fwmark 100 table 3

这么修改之后,发现在 pod 里面 ping 不通

pod 网卡抓包是

listening on cali2b6e696b9f2, link-type EN10MB (Ethernet), capture size 262144 bytes
10:58:08.593372 IP 10.151.163.151 > 172.31.0.86: ICMP echo request, id 45, seq 0, length 64
10:58:09.594439 IP 10.151.163.151 > 172.31.0.86: ICMP echo request, id 45, seq 1, length 64

eth4 网卡抓包是

listening on eth4, link-type EN10MB (Ethernet), capture size 262144 bytes
10:57:48.484657 IP 172.31.0.72 > 172.31.0.86: ICMP echo request, id 0, seq 10, length 64
10:57:48.486355 IP 172.31.0.86 > 172.31.0.72: ICMP echo reply, id 0, seq 10, length 64
10:57:50.487039 IP 172.31.0.72 > 172.31.0.86: ICMP echo request, id 0, seq 12, length 64
10:57:50.487943 IP 172.31.0.86 > 172.31.0.72: ICMP echo reply, id 0, seq 12, length 64

看起来 eth4 上的网卡是正常的,有发出去的和接受的包,但是 pod 网卡上只有发出去的包,没有接收的,感觉缺了一步,不知道是哪个地方少了?请大家帮忙看下

1836 次点击
所在节点    程序员
4 条回复
julyclyde
2020-06-02 11:52:09 +08:00
rp_filter
zydrsnuo
2020-06-02 12:29:39 +08:00
多半是 rp_filter

rp_filter 有三个值:0/1/2, 具体含意如下:

0: 关闭反向路由校验.
1: 开启严格的反向路由校验. 对每个进来的数据包, 校验其反向路由是否是最佳路由. 如果反向路由不是最佳路由, 则直接丢弃该数据包.
2: 开启松散的反向路由校验. 对每个进来的数据包, 校验其源地址是否可达, 即反向路由是否能通(通过任意网卡), 如果反向路径不通, 则直接丢弃该数据包.
当 rp_filter 的值为 1 时, 要求反向路由的出口必须与数据包的入口网卡是同一块, 否则就会丢弃数据包.

当 rp_filter 的值为 2 时, 要求反向路由必须是可达的, 如果反路由不可达, 则会丢弃数据包.

把 rp_filter 值设为 0, 关闭反向路由校验:

for x in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 0 > "${x}"
done

查看效果:

cat /proc/sys/net/ipv4/conf/*/rp_filter
sniperking1234
2020-06-02 12:42:03 +08:00
@zydrsnuo 果然修改了就好了,多谢指点
julyclyde
2020-06-02 15:16:25 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/677765

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX