cloudnativeto / cloudnativeto.github.io

该仓库用于存储云原生社区官网代码,为自动提交,请不要直接操作本仓库,包括 fork、提交 issue 和 PR。
https://cloudnative.to
21 stars 6 forks source link

在非容器环境上实现散装的 IPVS SVC | 云原生社区 #228

Open rootsongjc opened 2 years ago

rootsongjc commented 2 years ago

https://cloudnative.to/blog/create-a-ipvs-svc-without-container/

在没有容器的环境下,靠基础的软件实现一个 IPVS 的 SVC 负载。

guanxinquan commented 2 years ago

《我们 curl 的时候就会进到 INPUT 链》。如果我在本机上配置ipvs,通过本机curl vip,这个curl请求是不是直接进入了output链,并不是input链,curl属于socket输出,就是process对外输出,从iptables数据流向来看,这个数据应该是到了output链;如果进入output链,那就没办法使用ipvs规则??

zhangguanzhang commented 2 years ago

@guanxinquan 《我们 curl 的时候就会进到 INPUT 链》。如果我在本机上配置ipvs,通过本机curl vip,这个curl请求是不是直接进入了output链,并不是input链,curl属于socket输出,就是process对外输出,从iptables数据流向来看,这个数据应该是到了output链;如果进入output链,那就没办法使用ipvs规则??

INPUT是针对网桥下的,例如cni0和docker0下的容器,这个容器访问SVC的ip就是cni0和docker0接口进来的。

guanxinquan commented 2 years ago

@zhangguanzhang

@guanxinquan 《我们 curl 的时候就会进到 INPUT 链》。如果我在本机上配置ipvs,通过本机curl vip,这个curl请求是不是直接进入了output链,并不是input链,curl属于socket输出,就是process对外输出,从iptables数据流向来看,这个数据应该是到了output链;如果进入output链,那就没办法使用ipvs规则??

INPUT是针对网桥下的,例如cni0和docker0下的容器,这个容器访问SVC的ip就是cni0和docker0接口进来的。

我理解您说的意思,在node节点上配置ipvs,node节点上的容器使用的curl命令会进入cni0或者docker0网桥处理后转发,进入网桥的时候会进入input链,ipvs可以生效。 我在思考另外一个问题,比如抛开k8s逻辑,我在一台centos上配置了ipvs,此时,我在对应centos上curl配置的VIP地址,也是能够正确访问的,我只是不理解,如果ipvs在input链上,这种场景下,curl请求应当直接发送到了output链路,不会有ipvs的解析,理论应该是访问不通的,但是实际情况是可以访问通的。

zhangguanzhang commented 2 years ago

🤦‍♂️事实开log看到的是走的output,这点我也有点迷

guanxinquan commented 2 years ago

@zhangguanzhang 🤦‍♂️事实开log看到的是走的output,这点我也有点迷

这个问题纠结我好久了,现在考虑这个ipvs是不是真的只在input链上,我理解在output链上,是不是也有ipvs的拦截。我看一些分析文章只提到output链如果发现是ipvs处理过,就直接放过,但是没有人提output链会不会有ipvs挂接,我理解output链挂接ipvs转换逻辑好像也没什么不好。