-
1 # 每日一部電影解說
-
2 # 技術簡說
你好,我是研華科技西安分公司的技術主管,目前正在進行我司物聯網k8s雲平臺的建設和開發,我來回答您的問題:
k8s本身不處理具體的網路問題,事實上它也無法兼顧不同的網路需求和實現。k8s的做法是提出了CNI標準,由不同的廠商透過外掛的形式根據自己的需求去實現具體的網路設施。目前比較流行的外掛有:
flannel:flannel的方式比較簡單,它基於linux核心的虛擬網橋機制實現了同一個k8s主機上不同容器之間的物理通訊;對於不同主機不同pod之間的通訊則使用了overlay網路,也就是在udp協議之上執行vxlan協議。通訊模型如下:overlay協議(vxlan over udp)抓包如下:calico:calico把每臺k8s主機都模擬成一個路由器,並在其上面執行BGP路由協議來實現k8s主機之間的通訊,所以控制比較靈活,而且可以實現網路安全方面的管理,目前我們的集群裡採用的就是這個外掛。calico的架構如下:
canal:這個外掛我沒有了解過,研究過的朋友可以再做補充!
-
3 # 歐巴雲
這個問題其實是一個比較範的問題,必要明確的一點是,題主是否是對應專業畢業的,比如:計算機網路技術、網路工程、計算機應用等專業,從專業角度來說,K8S的網路我們可以把它看成是軟路由、軟交換、軟負載均衡、軟防火牆,本質上來說和硬路由、硬交換、硬負載均衡、硬防火牆是沒有任何區別的,甚至在有一些功能上,可能會比硬體裝置更完善。
目前來說K8S支援的網路外掛CNI有很多,包括:Flannel、Calico、Weave、Kube-Router、Canal、Cilium等等,大部分公有云廠商都預設使用Flannel,當然也有很多公有云廠商推出了自己的K8S CNI外掛,比如:Aliyun Terway、Azure CNI、AWS VPC CNI等等。
就木子個人而言,長期使用的外掛有:Flannel、Kube-Router、Calico,其實這些外掛在效能上,如果你沒有達到一個很大的K8S叢集標準,都相差不會太大,只是功能上會有一些不同,比如:二層、三層功能等。但需要注意的一點是,有一些外掛是不支援K8S Windows Worker Nodes的,比如:Kube-Router等等,目前來說支援Windows Worker Nodes最好的外掛還是Flannel。
Flannel外掛為什麼這麼受使用者喜歡了,第一K8S原生,第二簡單易用,所以相對來說Flannel外掛也是比較容易進行問題排查的。
Kube-Router外掛採用了很多Linux上沉澱了很多年的技術進行整合,本質上來說還是比較穩定和成熟的,比如:IPVS、IPtables、GoBGP等等,但正因為其整合了很多特性和功能,所以維護起來也更加麻煩,比如你需要了解BGP的工作原理,怎麼實現BGP容器與VPC網路互通等等,這是需要足夠多的網路專業知識才能夠真正玩得轉的。
而Calico相對於Flannel和Kube-Router來說就更加複雜一些,建議如果你是一個人運維且對於網路專業知識不是很瞭解,建議不要使用,避免入坑。
回覆列表
個故障源起來在k8s上同時安裝ceph群集(測試的時候機器不多啊)
當這兩者都OK之後,原來k8s上的服務例項,則有的通,有的不通了。
====================
所有可能的故障點,flannel,kubelet,kubeproxy都排查過之後,
定位在Iptable,
但net.ipv4.ip_forward = 1這種配置我是有的。
====================
我同時輸出一份正常和不正常的iptables配置。
發現了一個點:
於是啟用之後,一切都平靜了。。
但。。。這個規則是啥時加入的呢?
ceph自已加入的???
看來,以後不能混鍋燉了?
====================
iptables -L
複製程式碼
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-ISOLATION all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere
複製程式碼
執行命令:
iptables -P FORWARD ACCEPT
搞定。本來正常時的設定。
複製程式碼
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER-ISOLATION all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
複製程式碼