在k8s中,提供相同服務的一組pod可以抽象成乙個service,通過service提供的統一入口對外提供服務,每個service都有乙個虛擬ip位址(clusterip)和埠號供客戶端訪問。下面我們先來學習一下ipvs的相關知識kube-proxy存在於各個node節點上,主要用於service功能的實現,具體來說,就是實現集群內的客戶端pod訪問service,或者是集群外的主機通過nodeport等方式訪問service。
kube-proxy預設使用的是iptables模式,通過各個node節點上的iptables規則來實現service的負載均衡,但是隨著service數量的增大,iptables模式由於線性查詢匹配、全量更新等特點,其效能會顯著下降。
從k8s的1.8版本開始,kube-proxy引入了ipvs模式,ipvs模式與iptables同樣基於netfilter,但是採用的hash表,因此當service數量達到一定規模時,hash查表的速度優勢就會顯現出來,從而提高service的服務效能。
ipvs是lvs的核心元件,是一種四層負載均衡器。ipvs具有以下特點:與iptables同樣基於netfilter,但使用的是hash表;
支援tcp, udp,sctp協議,支援ipv4,ipv6;
支援多種負載均衡策略:rr, wrr, lc, wlc, sh, dh, lblc…
支援會話保持;
lvs主要由兩部分組成:
ipvs(ip virtual server):即ip虛擬服務,是工作在核心空間上的一段**,主要是實現排程的**,它是實現負載均衡的核心。
ipvsadm: 工作在使用者空間,負責為ipvs核心框架編寫規則,用於定義誰是集群服務,誰是後端真實伺服器。我們可以通過ipvsadm指令建立集群服務
# ipvsadm -a -t 192.168.2.xx:80 -s rr //建立乙個dr,並指定排程演算法採用rr。
# ipvsadm -a -t 192.168.2.xx:80 -r 192.168.10.xx
# ipvsadm -a -t 192.168.2.xx:80 -r 192.168.11.xx //新增兩個rs
ipvs基於netfilter, netfilter 中制定了資料報的五個掛載點(hook point),這5個掛載點分別是pre_routing、input、output、forward、post_routing,如下圖所示,ipvs工作在其中的input鏈上。當客戶端的請求到達負載均衡器的核心空間時,首先會到達prerouting鏈。下面我們來配置kube-proxy模式為ipvs當核心發現請求資料報的目的位址是本機時,將資料報送往input鏈。
當資料報到達input鏈時,首先會被ipvs檢查,如果資料報裡面的目的位址及埠沒有在ipvs規則裡面,那麼這條資料報將被放行至使用者空間。
如果資料報裡面的目的位址及埠在ipvs規則裡面,那麼這條資料報文的目的位址被修改為通過負載均衡排程演算法選好的後端伺服器(dnat),並送往postrouting鏈。
最後經由postrouting鏈發往後端伺服器。
kube proxy配置 ipvs模式
在k8s中,提供相同服務的一組pod可以抽象成乙個service,通過service提供的統一入口對外提供服務,每個service都有乙個虛擬ip位址 clusterip 和埠號供客戶端訪問。kube proxy存在於各個node節點上,主要用於service功能的實現,具體來說,就是實現集群內的客...
IPVS系統的FTP應用模組
ftp應用模組沒有全域性初始化操作,僅是註冊了網路命名空間操作ip vs ftp ops,初始化init函式為 ip vs ftp init。static struct pernet operations ip vs ftp ops static int init ip vs ftp init vo...
ipvs負載均衡(一)基本概念
ipvs是指ip虛擬伺服器 ip virtual server,簡寫為ipvs ipvs是乙個高效的layer 4交換機 單來說就是以源目標ip位址 層3 源目標埠 層4,所以叫layer 4 它提供負載平衡的功能。這裡拿tcp鏈路負載均衡舉例 實際上現在ipvs開源版本支援tcp udp sctp...