美文网首页
Ip rule策略路由在ipvs下不生效

Ip rule策略路由在ipvs下不生效

作者: Teddy_b | 来源:发表于2024-08-12 18:08 被阅读0次

背景

有些部署在国内的业务,有海外用户访问国内的场景,这时候,发现海外无法访问国内;但是在国内访问是正常的;

进一步实验,发现国内跨ISP时也无法访问,比如出现移动无法访问联通的情况。

通过验证各种场景下的连通性情况,发现只要经过内部的transparentrouter基础服务的都会不通,而不经过transparentrouter的基本上可以正常访问。

Ip rule

首先查看了宿主机上当前的策略路由

xxx@VM-0-16-ubuntu:~$ /home/xxx/ip rule list
0:      from all lookup local
32000:  from all ipproto udp lookup main
32001:  from all lookup transparentrouter
32766:  from all lookup main
32767:  from all lookup default

按照当前的策略路由,所有的tcp包都会经过transparentrouter这个路由表,而不会经过默认的main路由表

添加策略让特定端口80和30720不经过transparentrouter,转而走默认路由,这里的80端口是容器的监听端口,30720是容器通过Service的NodePort暴露的端口

xxx@VM-0-16-ubuntu:~$ /home/xxx/ip rule add ipproto tcp sport 80 lookup main

xxx@VM-0-16-ubuntu:~$ /home/xxx/ip rule list
0:      from all lookup local
31998:  from all ipproto tcp sport 30720 lookup main
31999:  from all ipproto tcp sport 80 lookup main
32000:  from all ipproto udp lookup main
32001:  from all lookup aprouter
32766:  from all lookup main
32767:  from all lookup default

添加规则后,发现没用,仍然无法访问。

为了简化问题,决定将容器的部署模式改为HostNetwork,然后直接注册容器的IP和端口到Loadbalancer上面;(目前是容器网络模式为calico,然后注册的是NodePort到Loadbalancer上面)

上述将LB的RS改为容器端口后,发现问题解决了,访问正常了。

容器继续使用HostNetwork,但是中间再加一层Service,然后注册Service的NodePort到Loadbalancer上面,发现又不通了;

可以看出问题出在Service这一层;集群里的kube-proxy是ipvs模式部署的,问题可能出在ipvs这里。

ipvs snat_reroute

后来发现可能是宿主机ipvs的配置对策略路由选择有影响


企业微信截图_1723026696265(1).png

参考链接:
https://www.kernel.org/doc/html/latest/networking/ipvs-sysctl.html
http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.LVS-NAT.html

最终将该配置修改为0后,访问均正常了。

ip rule进一步调整

进一步的测试了几种case

  • 修改容器内的该参数是否可行?
image.png

验证结果是不行,ipvs的snat发生在主机层面,修改容器内的无效

  • 策略路由针对特定IP和端口是否可行
企业微信截图_17231021535526.png

验证结果是可行

  • 策略路由针对网段是否可行


    企业微信截图_17231022158527.png

验证结果是可行

最后关于ip命令版本:

ip utility, iproute2-5.19.0

相关文章

网友评论

      本文标题:Ip rule策略路由在ipvs下不生效

      本文链接:https://www.haomeiwen.com/subject/abkdkjtx.html