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