Kubernetes之Headless Services

Kubernetes中的Headless Services(無頭服務)是一種特殊類型的服務(Service)定義,它不提供傳統意義上的負載均衡和集群IP地址分配。在無頭服務中,spec.clusterIP 字段被顯式設置為None ,Kubernetes不會為該服務分配一個虛擬IP(ClusterIP)地址。

一、無頭服務的特點

  • 沒有Cluster IP:不分配Cluster IP,客戶端不能通過服務的Cluster IP地址訪問后端Pod,而是直接通過Pod的具體地址進行通信。

  • 直接使用DNS解析:Kubernetes的DNS系統會為無頭服務生成一條特殊的DNS記錄,這條記錄列出所有關聯Pod的IP地址,允許客戶端通過域名解析直接獲得Pod列表,進而實現自定義的負載均衡或服務發現邏輯。

  • 適用于狀態服務應用:特別適合那些需要直接與特定實例通信的應用場景,如分布式數據庫、消息隊列等有狀態服務,因為這些服務往往需要客戶端直接與服務實例建立會話或維持連接狀態。

二、headless Service和普通Service的區別

  • headless不分配clusterIP

  • headless service可以通過解析service的DNS,返回所有Pod的地址

  • 普通的service,只能通過解析service的DNS返回service的ClusterIP。client訪問ClusterIP,通過iptables或者ipvs轉發到Real Server(Pod)

三、無頭服務應用場景

  • 有狀態應用(StatefulSet):在部署有狀態應用時,如分布式數據庫集群(如Zookeeper、MySQL等),需要客戶端直接訪問特定節點,而不是通過負載均衡隨機分配。比如MongoDB副本集,需要每個節點直接相互通信或客戶端直接訪問特定節點。比如Zookeeper、etcd集群,節點間需要相互發現并建立連接。

  • 服務發現與自定義負載均衡:當應用需要實現自定義的負載均衡算法或服務發現邏輯時,無頭服務允許應用直接與后端Pod列表交互,便于實現更精細的控制邏輯。

  • Session親和性:對于需要維護會話狀態的應用,使用無頭服務可以直接指向會話所屬的Pod,確保會話的一致性。

四、實驗測試

  • 普通的service
[root@node1 ~]# kubectl get po -n test -o wide 
NAME                    READY   STATUS    RESTARTS   AGE   IP              NODE    NOMINATED NODE   READINESS GATES
test-5977dc5756-ksff2   1/1     Running   0          22h   172.16.28.42    node3   <none>           <none>
test-5977dc5756-vrbg2   1/1     Running   0          22h   172.16.154.23   node1   <none>           <none>
test-5977dc5756-zgw4c   1/1     Running   0          22h   172.16.44.33    node2   <none>           <none>
[root@node1 ~]# kubectl get svc -n test
NAME        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
nginx-svc   ClusterIP   10.233.23.79   <none>        80/TCP    19d
[root@node1 ~]# 
[root@node1 ~]# kubectl get endpoints  -n test
NAME        ENDPOINTS                                          AGE
nginx-svc   172.16.154.23:80,172.16.28.42:80,172.16.44.33:80   19d
[root@node1 ~]# 我們在物理機使用dig指定coredns 地址進行解析svc,如下:
[root@node1 ~]# dig  @10.233.0.3 nginx-svc.test.svc.test.com; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> @10.233.0.3 nginx-svc.test.svc.test.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1089
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;nginx-svc.test.svc.test.com.	IN	A;; ANSWER SECTION:
nginx-svc.test.svc.test.com. 30	IN	A	10.233.23.79  ###此處得知返回結果為cluster ip;; Query time: 1 msec
;; SERVER: 10.233.0.3#53(10.233.0.3)
;; WHEN: Thu May 09 14:42:27 CST 2024
;; MSG SIZE  rcvd: 99
  • headless service
[root@node1 ~]# kubectl get po -o wide 
NAME                                      READY   STATUS    RESTARTS      AGE    IP              NODE    NOMINATED NODE   READINESS GATES
maradb-0                                  1/1     Running   0             22h    172.16.44.32    node2   <none>           <none>
maradb-1                                  1/1     Running   0             22h    172.16.28.44    node3   <none>           <none>
maradb-2                                  1/1     Running   0             21h    172.16.154.25   node1   <none>           <none>
[root@node1 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.233.0.1      <none>        443/TCP    396d
mariadb      ClusterIP   None            <none>        3306/TCP   22h我們在物理機使用dig指定coredns 地址進行解析svc,如下:
[root@node1 ~]# dig  @10.233.0.3 mariadb.default.svc.test.com; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.13 <<>> @10.233.0.3 mariadb.default.svc.test.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35068
;; flags: qr aa rd; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;mariadb.default.svc.test.com.	IN	A;; ANSWER SECTION:
mariadb.default.svc.test.com. 30 IN	A	172.16.28.44   ##此處得知返回的結果為pod的真實地址
mariadb.default.svc.test.com. 30 IN	A	172.16.154.25
mariadb.default.svc.test.com. 30 IN	A	172.16.44.32;; Query time: 1 msec
;; SERVER: 10.233.0.3#53(10.233.0.3)
;; WHEN: Thu May 09 14:27:43 CST 2024
;; MSG SIZE  rcvd: 189

五、使用無頭服務的好處

  • 簡化服務發現:通過DNS記錄直接提供Pod列表,簡化了服務發現過程,特別是對于需要直接與各個實例交互的應用。

  • 增強控制靈活性:允許應用層決定如何分配請求到各個Pod,適應特定的業務邏輯或性能需求。

  • 支持有狀態應用部署:更好地匹配有狀態應用的部署需求,確保數據的一致性和可靠性。

  • 減少網絡跳轉:去除了一層負載均衡,減少了網絡延遲,提高了通信效率。

使用無頭服務是為了在某些特定場景下,繞過Kubernetes的常規服務代理和負載均衡機制,以實現更直接、更靈活的服務實例訪問方式,特別是在需要保持會話狀態、實現自定義負載策略或部署有狀態應用的場景中。這種方式提供了更高的靈活性和對底層基礎設施的直接控制能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11185.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11185.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11185.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

可道云teamOS企業網盤實用插件介紹:實時在線流程圖編輯與分享,用在線流程圖打造數字化工作流程

在使用企業網盤用于日常辦公的情況下&#xff0c;有一些實用的在線小工具能為團隊效率和協作帶來一定的提升。 今天要給大家介紹的可道云teamOS的在線畫流程圖&#xff0c;是很值得介紹的一個在線工具。 在線流程圖&#xff1a;直觀展示&#xff0c;高效便捷 以往我們想要梳理…

FANUC機器人單軸零點標定時提示無法執行零點標定,由于重力補償已啟用,所有機器人軸的脈沖計數必須有效

FANUC機器人單軸零點標定時提示無法執行零點標定,由于重力補償已啟用,所有機器人軸的脈沖計數必須有效 首先,機器人由于長時間斷電未使用,6個軸的編碼器數據全部丟失,上電后報警SRVO-062, 有關SRVO-062故障報警的相關內容可參考以下鏈接: FANUC機器人SRVO-062報警原因分…

LeetCode 2391. 收集垃圾的最少總時間

Problem: 2391. 收集垃圾的最少總時間 問題分解 我們將這個問題分解為以下幾個小問題&#xff1a; 計算每種垃圾&#xff08;金屬、紙、玻璃&#xff09;在每個房子中的數量。確定每種垃圾車最后到達的房子。計算每種垃圾車行駛的總時間。計算每種垃圾車收拾垃圾的總時間。返…

SQLite 語法大全

SQLite EXPLAIN 語句&#xff1a; EXPLAIN INSERT statement...; or EXPLAIN QUERY PLAN SELECT statement...; SQLite GLOB 子句&#xff1a; SELECT column1, column2....columnN FROM table_name WHERE column_name GLOB { PATTERN }; SQLite GROUP BY 子句&#xff1…

journalctl參數詳解

journalctl 是 Systemd 日志管理工具&#xff0c;用于查看、查詢和管理 Systemd 系統日志。 #-x: 詳細模式&#xff08;Verbose&#xff09;。這個選項會使 journalctl 輸出完整的日志消息&#xff0c;包括其原始結構&#xff0c;如嵌套的JSON消息、未展開的環境變量等。這對于…

Scratch四級:第08講 排序算法

第08講 排序算法 教練&#xff1a;老馬的程序人生 微信&#xff1a;ProgrammingAssistant 博客&#xff1a;https://lsgogroup.blog.csdn.net/ 講課目錄 常考的排序算法項目制作&#xff1a;“三個數排序”項目制作&#xff1a;“成績查詢”項目制作&#xff1a;“排序”項目制…

單片機智能燈控制系統源程序仿真原理圖與論文全套資料

目錄 1、設計描述 2、仿真圖 3、程序 4、資料內容 資料下載地址&#xff1a;單片機智能燈控制系統源程序仿真原理圖與論文全套資料下載 1、設計描述 設計了一款智能控制系統。 AT89C51LCD1602DS1302按鍵LED組成了這樣一個完整的設計。 P2.0-P2.3 4個LED等代表庭院內的4…

計算機視覺——Opencv blobFromImage與torchvision實現數據標準化

1.blobFromImage blobFromImage 是 OpenCV 的深度神經網絡&#xff08;DNN&#xff09;模塊中的一個函數&#xff0c;它用于將圖像轉換為深度學習模型所需的輸入格式&#xff0c;主要是對傳入的圖像進行的轉換包括圖像尺寸調整、均值減法、縮放等預處理步驟&#xff0c;以便圖…

架構設計之學新而知故

緣由 因為一些特殊的機緣&#xff0c;接觸到洋蔥架構等一些新架構設計概念。 嘗試理解了一段時間&#xff0c;就想簡單梳理下對它們的理解&#xff0c;以達到學新而知故 &#x1f603; 信息增益 以前計算機專業并不設置通信領域的信息論的專業課程&#xff0c;但是&#xf…

輸出指定日期區間內的所有天、周、月

hutool獲取指定時間周幾 Slf4j public class DateWeekUtil {public static List<String> getDateWeek(String startDateString, String endDateString, List<Integer> codeList) {List<String> dateInfoList new ArrayList<>();List<Integer> v…

工作隨機:linux 掛載LVM管理模式的磁盤

文章目錄 前言一、創建一個分區二、創建PV三、創建VG四、創建LV五、格式化并掛載目錄 前言 在數據庫管理中&#xff0c;常有比較頭疼的問題&#xff0c;就是一段時間發展后我的磁盤空間不夠了&#xff0c;想要擴容原有的目錄很是頭疼&#xff0c;那么LVM管理的優勢就體現出來了…

JAVA學習-練習試用Java實現改寫字符串

問題&#xff1a; 鍵盤錄入一個字符串&#xff0c;將字符串中的大寫改成小寫&#xff0c;小寫改成大寫&#xff0c;數字改成。例如heLLO123,輸出后為HEllo** 解答思路&#xff1a; import java.util.Scanner;public class StringConversion {public static void main(String…

單元測試之JUnit5知識點總結及代碼示例

單元測試是軟件開發過程中的一種驗證手段&#xff0c;它針對最小的可測試部分&#xff08;通常是函數或方法&#xff09;進行檢查和驗證。其實單元測試還是挺重要的&#xff0c;不過國內很多公司的項目其實并沒有做好單元測試&#xff0c;或者根本就沒做單元測試&#xff0c;原…

英語復習之英語形近詞總結(四)

英語形近詞總結復習第四部分&#xff1a; 單詞 釋義例句 genuine 英 /?d?enju?n/ 美 /?d?enju?n/ adj.真實的&#xff0c;真正的&#xff1b;誠懇的 1.Only genuine refugees can apply for asylum. 只有真正的難民才能申請政治避難。 《牛津詞典》 2.This isnt a genui…

C++筆試強訓day19

目錄 1.小易的升級之路 2.禮物的最大價值 3.對稱之美 1.小易的升級之路 鏈接 模擬就行&#xff0c;唯一可能是難點得就是gcd&#xff08;最大公約數&#xff09; #include <iostream> using namespace std; #define int long long const int N 1e5 10; int arr[N];…

兒童懸吊訓練系統如何進行制動肌的動力訓練

兒童懸吊訓練系統進行制動肌的動力訓練&#xff0c;可以按照以下步驟進行&#xff1a; 評估&#xff1a;首先&#xff0c;治療師需要對兒童的制動肌進行評估&#xff0c;確定其穩定性和力量水平&#xff0c;從而制定合適的訓練計劃。 選擇訓練方式&#xff1a;根據評估結果&am…

利用IP地址查詢解決被“薅羊毛”的方法

在互聯網時代&#xff0c;隨著各種網絡詐騙手段的不斷更新和演變&#xff0c;“薅羊毛”成為了一種常見的網絡犯罪行為。其中&#xff0c;利用查詢IP地址進行欺詐活動已經成為一種普遍的手段。當個人或組織的IP地址被不法分子查詢后&#xff0c;可能會面臨虛假注冊、盜取個人信…

Python中的絕對路徑與相對路徑詳解

對路徑與相對路徑 Python中的絕對路徑與相對路徑詳解什么是路徑&#xff1f;絕對路徑優點&#xff1a;缺點&#xff1a;示例&#xff1a; 相對路徑優點&#xff1a;缺點&#xff1a;示例&#xff1a; Python中如何使用**重點內容**&#xff1a;**在Python中&#xff0c;建議使用…

AVL Cruise與Simulink聯合仿真(通過MATLAB DLL方式)

最近畢業設計需要用到AVL Cruise與Simulink進行聯合仿真&#xff0c;分析汽車模型的經濟性。下面介紹一下我所知的AVL Cruise與Simulink聯合仿真的幾種方式&#xff0c;它們各自的優缺點&#xff0c;以及DLL方式聯合仿真的具體配置過程。我這里用的MATLAB軟件版本是2021a&#…

有邊數限制的最短路

文章目錄 題目 有邊數限制的最短路算法分析1、問題&#xff1a;為什么Dijkstra不能使用在含負權的圖中&#xff1f;dijkstra詳細步驟2、什么是bellman - ford算法&#xff1f;3、bellman - ford算法的具體步驟4、在下面代碼中&#xff0c;是否能到達n號點的判斷中需要進行if(di…