今天跟大家分享在地端資料中心內建立Kubernetes叢集之後,如何針對網路進行更進一步的優化。除了CNI(容器網路接口)的設定,實務上我還會再另行建立Loadbalancer的機制。
至於為什麼要這樣做呢,就在這篇文章中透過對MetalLB的功能說明,相信您也可以理解為什麼這樣做在實務上是較好的做法之一。
本文的測試環境是選擇地端LoadBalancer常使用的MetalLB,先說明相關的基本觀念,並且重點說明最基礎的Layer 2模式(另一個是BGP模式),後續將會再針對建置實務再做分享,項目如下:
官網說明:
Provides a network load-balancer implementation. In short,it allows you to create Kubernetes services of type LoadBalancer
in clusters that don’t run on a cloud provider, and thus cannot simply hook
into paid products to provide load balancers.
提供在地端實現網絡負載均衡器的方式。簡而言之,
它允許您在非運行雲端提供商上的叢集中創建類型為LoadBalancer的Kubernetes的服務。
因為地端的K8S原生並沒有實作LoadBalancer的功能,所以只能在公有雲IaaS平台才能直接使用LoadBalancer
類型的service。除此之外就只能用NodePort
or externalIP
來暴露服務。但一般來說建議還是使用LoadBalancer
類型較好。
以下幾點說明使用MetalLB的優點:
當外部想要找K8S內的某個服務,透過發送ARP,由Leader節點用MAC address回應。外部主機就會將回應存在本地的ARP table,下次就可以直接從本地取得。當請求已到達節點之後,節點就會再透過kube-proxy
將請求轉到負載平衡的目標Pod。
(注意:此處在節點內還是用kube-proxy
來提供服務的負載平衡)
L2模式下,IPv4使用ARP ; IPv6使用NDP。
=> ARP: 從IP取得MAC的TCP/IP protocol
=> NDP: 取代ARP, ICMP,用來跟踪鄰居狀態、重復地址檢測、路由器發現、重導向
這裡簡單說明一下這個模式下是怎麼運行,以及L2模式的缺點。
L2 Speaker是DaemonSet
,故在每個節點都會有一個Pod。幾個Pod間會自我投票選出Leader。而Leader speaker大致上是用以下方式選擇出來:
3. Leader Speaker 負責 ARP 代理:一旦 Leader Speaker 被選出,它將成為 ARP 代理的主要負責者。只有 Leader Speaker 會回應外部設備發送的 ARP 請求,這有助於確保在集群中只有一個 Speaker 負責處理 ARP 請求。
#-----------------------------------------------
# S3-1. 每個node都有一個speaker
#-----------------------------------------------
[lb01]# kubectl get pod -o wide
說明:Leader Pod會取得所有LB類型的Service,將已分配的IP綁到目前主機網卡上。
Leader也會回應對External IP的ARP/NDP請求。因此Speaker所在的機器會有多個IP。
#-----------------------------------------------
# S3-2. 確認ARP MAC
#-----------------------------------------------
[lb01]# kubectl get pod -o wide
[lb01]# kubectl get svc
[lb01]# arp 10.107.88.90
以上說明LoadBalance IP的MAC與worker02的MAC相同,也就是說Pod是運行在worker02之上,所以當Request發起時,會由worker02上的speaker來回應,流量就會導至worker02節點。
在節點內,kube-proxy會將收到的流量傳播到對應Service後端的Pod。在這個層面上,L2模式其實並沒有真的實作Loadbalance,而是實作了一個failover機制,當Leader節點出問題時,可以自動接管服務
。
※ L2模式的缺點:
自動故障轉移
,目前是透過memberlist,當其他節點檢測到Leader故障後會自選出新的Leader。新的Leader會自動接管所有External IP並發送大量的L2封包來通知客戶端(其他節點)ExternalIP的MAC. (官網說通常10秒內會轉完)MetalLB 主要分為 Controller 和 Speaker二個部分,Controller 負責IPAM,Speaker 則負責 IP 通告。這二個元件就可以實現MetalLB的全部功能了。有二種模式可依實際環境配合使用:
=> 優點:通用性好,適合任何網路環境,不需要特殊硬體
=> 缺點:單節點瓶頸和故障轉移慢
=> 優點:可以在多節點間負載平衡、沒有單節點瓶頸、故障轉移快
=> 缺點:使用BGP就需要支援硬體路由器設備
※ 建議:
本篇先針對MetalLB的基本概念先進行說明,接下來會分享如何在Kubernetes Cluster上進行MetalLB的部署工作,敬請期待後續,也感謝您的觀看,下期再見!!!
References: