內部通訊 ClusterIP

2021-09-28 18:17:42 字數 1481 閱讀 7451

首先,我們來回顧一下kubernetes集群內部各個服務之間相互訪問的方法。

kubernetes以pod作為應用部署的最小單位。kubernetes會根據pod的宣告對其進行排程,包括建立、銷毀、遷移、水平伸縮等,因此pod 的ip位址不是固定的,不方便直接採用pod ip對服務進行訪問。

為解決該問題,kubernetes提供了service資源,service對提供同乙個服務的多個pod進行聚合。乙個service提供乙個虛擬的cluster ip,後端對應乙個或者多個提供服務的pod。在集群中訪問該service時,採用cluster ip即可,kube-proxy負責將傳送到cluster ip的請求**到後端的pod上。

kube-proxy是乙個執行在每個節點上的go應用程式,支援三種工作模式:

userspace

該模式下kube-proxy會為每乙個service建立乙個監聽埠。發向cluster ip的請求被iptables規則重定向到kube-proxy監聽的埠上,kube-proxy根據lb演算法選擇乙個提供服務的pod並和其建立鏈結,以將請求**到pod上。

該模式下,kube-proxy充當了乙個四層load balancer的角色。由於kube-proxy執行在userspace中,在進行**處理時會增加兩次核心和使用者空間之間的資料拷貝,效率較另外兩種模式低一些;好處是當後端的pod不可用時,kube-proxy可以重試其他pod。

kube-proxy userspace模式

- kube-proxy userspace模式

來自:kubernetes官網文件

iptables

為了避免增加核心和使用者空間的資料拷貝操作,提高**效率,kube-proxy提供了iptables模式。在該模式下,kube-proxy為service後端的每個pod建立對應的iptables規則,直接將發向cluster ip的請求重定向到乙個pod ip。

該模式下kube-proxy不承擔四層**的角色,只負責建立iptables規則。該模式的優點是較userspace模式效率更高,但不能提供靈活的lb策略,當後端pod不可用時也無法進行重試。

kube-proxy iptables模式

- kube-proxy iptables模式

來自:kubernetes官網文件

ipvs

該模式和iptables類似,kube-proxy監控pod的變化並建立相應的ipvs rules。ipvs也是在kernel模式下通過netfilter實現的,但採用了hash table來儲存規則,因此在規則較多的情況下,ipvs相對iptables**效率更高。除此以外,ipvs支援更多的lb演算法。如果要設定kube-proxy為ipvs模式,必須在作業系統中安裝ipvs核心模組。

Linux中實現內部程序通訊

linux給我們提供了豐富的內部程序通訊機制,包括共享記憶體 記憶體對映檔案 先入先出 fifo 介面 sockets 以及多種用於同步的標識。在本文中,我們主要討論一下共享記憶體和記憶體對映檔案技術。一般來說,內部程序通訊 interprocess communication 也就是ipc,是指兩...

簡易App內部訊息通訊

之前文章介紹了用廣播去通知介面更新,這會兒又無法滿足我的要求 廣播進行訊息通訊 廣播的好處 我現在又為什麼不滿足於廣播?我的需求 為此我需要打的地基 大致的結構 show code created by gss on 2018 2 12 0012.public abstract class base...

Lan內部是如何完成通訊的

乙太網是資料鏈路層的一種通用協議,乙太網包的標頭里包含傳送方和接受方的mac位址。資料報裡存放ip 網路層 的東西。網路層的標頭里存放傳送方和接受方的ip位址,資料長度,資料報裡存放tcp udp 傳輸層 的東西 udp的表頭里存放傳送方和接受方的埠,tcp的話除此之外還會放置保證傳輸的各種屬性。傳...