[Kubernetes]使用Calico CNI在CentOS8上pod to pod連線問題

Morpheus Huang
3 min readJul 10, 2021

--

因為有需求要在CentOS上安裝Kubernetes,同事使用CentOS 8與Calico v3.10,結果出現pod to pod無法連線的問題…

實際裝了一遍發現CentOS 8搭配最新版本的Calico v3.19,測起來沒啥問題,改用Calico v3.10後,確實Pod-to-Pod不通。因此,查了有問題的叢集的iptables規則,發現並沒看到應該有的cali-開頭的規則,這時候想到了之前友人安裝Kubernets時,提到RHEL 8不支援iptable-legacy導致kubernetes裝不起來的情形,又CentOS是RHEL-based,於是查了CentOS 8 iptabels版本 iptables v1.8.4 (nf_tables) ,看來問題可能在這了。知道可能的問題原因,就先…..萬事問google大神XD

從上面的issue討論,其實Calico早在v3.8.1+就有相關設定參數FELIX_IPTABLESBACKEND,可以處理這個問題,根據官方文件的解釋:

This parameter controls which variant of iptables binary Felix uses. Set this to Auto for auto detection of the backend. If a specific backend is needed then use NFT for hosts using a netfilter backend or Legacy for others. [Default: Auto]

從官方文件可以知道,目前這個值預設是Auto的,那使用Calico 3.10為何會有問題,原因在於 Default: Auto 是Calico v3.18.0才改的(Default for IptablesBackend is Auto),在這版本之前該值預設都還是 Legacy

所以,使用Calico v3.18+對於CentOS不管是8 or 7都沒有影響,但如果在CentOS 8上使用低於Calico v3.18的版本,則需手動在DaemonSet “calico-node”環境變數裡,設定FELIX_IPTABLESBACKEND為NFT或者Auto才不會有Pod to Pod網路連線的問題。

- name: FELIX_IPTABLESBACKEND
value: NFT
or
- name: FELIX_IPTABLESBACKEND
value: Auto

其他參考資料:

--

--