POD无法通过Service访问自己


今天遇到一个特别的问题,就是我把项目的访问方式直接改成调用K8S svc的模式 ,当POD 访问service 在通过service 访问自己POD 的时候发现一个问题,就是连接超时

使用的cni插件是flannel,但不是容器化安装,也不是标准化的通过kubelet指定cni plugin(–cni-bin-dir,–cni-conf-dir参数),而是通过dockerd 提供的-bip参数指定容器的子网,而这个值是从/run/flannel/subnet.env(flannel会将获取到的子网写入到该文件)

看网上的解决方案是修改docker0 为  promiscuous 模式

混杂模式(英語:promiscuous mode)

是电脑网络中的术语。 是指一台机器的网卡能够接收所有经过它的数据流,而不论其目的地址是否是它。 一般计算机网卡都工作在非混杂模式下,此时网卡只接受来自网络端口的目的地址指向自己的数据。 当网卡工作在混杂模式下时,网卡将来自接口的所有数据都捕获并交给相应的驱动程序

ifconfig docker0 promisc

查看dmesg

 

取消这种模式

 ifconfig docker0  -promisc

所以,为了避免这种问题,还是使用标准的安装方式

所以还是要跟着标准的k8s方式来安装cni,避免入坑,比如flannel就已经提供给了hairpinMode 参数来进行配置开启

CNI bridge 插件还会为它设置 Hairpin Mode(发夹模式)。
这是因为,在默认情况下,网桥设备是不允许一个数据包从一个端口进来后,再从这个端口发出去的。
但是,它允许你为这个端口开启 Hairpin Mode,从而取消这个限制。

参考地址

https://silenceper.com/blog/202004/bridge-hairpin-mod/?hmsr=codercto.com&utm_medium=codercto.com&utm_source=codercto.com

https://segmentfault.com/a/1190000022527352?utm_source=tag-newest

https://www.freesion.com/article/657152949/

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM