模仿七層網絡模型,抽象出四層模型
POD網絡
同一節點上的pod網絡
- 依賴于虛擬網橋/網卡(linux虛擬設備)
- pod內容器共享網絡棧(pause容器創建)
不同節點上的pod網絡
- 路由方案:依賴于底層網絡設備,但性能開銷小
- 覆蓋網絡:不依賴于底層網絡,但有封包解包開銷
CNI:容器網絡接口
- 是一個pod網絡集成標準,簡化k8s和不同pod網絡實現技術的集成
Service網絡
- service網絡構建于pod網絡之上,目的在于:
1. 服務發現service discovery
2. 負載均衡load balancing
-
servicename+clusterip統一屏蔽服務發現和負載均衡,原理基于DNS+service registry
-
客戶端kube-proxy + iptables轉發,無傾入不穿透性能損耗比較小
-
k8s的服務發現機制可以認為是現代微服務發現機制+傳統linux內核機制的融合
服務網絡實現原理
服務發現:k8s方案 vs Eureka+Ribbon方案
NodePort vs LoadBalancer vs Ingress對外暴露服務方案
- NodePort 將service暴露在節點網路上,nodeport背后是kube-proxy。kube-proxy是溝通service網絡、pod網絡和節點網絡的橋梁
- LoadBalancer 將service暴露在公網上+負載均衡,背后對接nodeport,公有云支持但收費
- Ingress 同時將多個HTTP服務暴露到外網,但是只需申請一個或少量LB,七層反向代理,相當于一種特殊的service
- 通過kubectl proxy或者port forward,可以在本地環境快速調試k8s中的服務或pod
- k8s的Service發布的三種type :
- type=ClusterIP,表示內部可以訪問服務
- type=NodePort,表示通過NodePort對外暴露的服務
- type=LoadBalancer,表示通過LoadBalancer對外暴露服務
深入分析Kube-Proxy
理解netfilter和iptables
kube-proxy的三種工作模式
用戶空間代理模式
已經基本淘汰
iptables模式
生產適用,中小規模集群
ipvs模式