[Kubernetes]使用Calico CNI在CentOS8上pod to pod連線問題
因為有需求要在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 useNFT
for hosts using a netfilter backend orLegacy
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
其他參考資料: