Docker Kubernetes Service 網路服務代理模式詳解
Docker Kubernetes Service 網路服務代理模式詳解
Service
- service是實現kubernetes網路通訊的一個服務
- 主要功能:負載均衡、網路規則分佈到具體pod
注:kubernetes deployment服務分配伺服器負載均衡VIP只能NODE節點單獨訪問,這裡需要外網使用者可以放問到容器內,這裡就需要用到service。
網路代理模式
- kube-proxy v1.0中只支援userspace模式,在v1.1中,添加了iptables代理,在v1.2開始iptables是預設的。
- service為pod提供了一個統一的訪問入口已userspace模式iptables模式,進行代理轉發。
- userspace與iptables主要是實現對IP的轉發。
userspace模式
1、NODE節點的客戶端要訪問service的代理IP+埠。
2、IP與埠是由kube-proxy維護的,它建立了IPtables一個規則。
3、請求經過IPtables後,再轉發給kube-proxy埠。
4、kube-proxy關聯後端的backend pod,將請求根據標籤代理到指定的Backenpod。
注:Backend Pod:訪問節點IP的指定埠,轉發到後端的pod。kubectl get ep 可檢視Backend Pod IP。
注:效率比較低,需要經過一次轉發。
注:kube-proxy是使用的使用者空間處理。
iptables模式
1、NODE節點客戶端直接訪問serviceIP,Linux根據Iptables協議棧規則策略匹配。
2、serviceIP根據標籤直接訪問Backendpod。
注:直接使用iptables 使用核心空間處理 速度快。
服務代理型別
ClusterIP
分配一個內部叢集IP地址,只能在叢集內部訪問(同Namespace內的Pod),預設ServiceType。
NodePort
分配一個內部叢集IP地址,並在每個節點上啟用一個埠來暴露服務,可以在叢集外部訪問。
訪問地址:<NodeIP>:<NodePort>
LoadBalancer
分配一個內部叢集IP地址,並在每個節點上啟用一個埠來暴露服務。
除此之外,Kubernetes會請求底層雲平臺上的負載均衡器,將每個Node([NodeIP]:[NodePort])作為後端新增進去。
ExternalName
通過CNAME將Service與externalName的值對映。要求kube-dns的版本為v1.7+。
拓撲圖
nodeport:前端對使用者代理使用nginx/LVS/HAProxy來做為負載均衡使用,代理每個NODE節點IP埠去訪問pod。
LoadBalancer:主要通過雲平臺提供封裝好的介面來做為負載均衡器進行代理轉發。