V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
sniperking1234
V2EX  ›  程序员

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

  •  1
     
  •   sniperking1234 · 2020-06-02 11:15:45 +08:00 · 1994 次点击
    这是一个创建于 1665 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 网卡上只有发出去的包,没有接收的,感觉缺了一步,不知道是哪个地方少了?请大家帮忙看下

    4 条回复    2020-06-02 15:16:25 +08:00
    julyclyde
        1
    julyclyde  
       2020-06-02 11:52:09 +08:00   ❤️ 1
    rp_filter
    zydrsnuo
        2
    zydrsnuo  
       2020-06-02 12:29:39 +08:00 via Android   ❤️ 1
    多半是 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
        3
    sniperking1234  
    OP
       2020-06-02 12:42:03 +08:00
    @zydrsnuo 果然修改了就好了,多谢指点
    julyclyde
        4
    julyclyde  
       2020-06-02 15:16:25 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3000 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 00:18 · PVG 08:18 · LAX 16:18 · JFK 19:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.