【k8s、docker】Headless Service(無頭服務)

文章目錄

  • 問題背景
  • 1、什么是Headless Service
    • 1.2 為什么 Zookeeper 使用 Headless Service?
    • 1.2 Headless Service 的 DNS 行為
    • 1.3 驗證示例
    • 1.4 如何創建 Headless Service?
  • 2. zk-0.zookeeper.default.svc.cluster.local 域名是如何創建出來的? 是無頭服務自動映射的嗎

問題背景

zookeeper ClusterIP None 這中svc作用是什么,為什么沒有cluster ip

1、什么是Headless Service

在 Kubernetes 中,ClusterIP 類型的 Service 被設置為 None(即 ClusterIP: None)時,表示這是一個 Headless Service(無頭服務)。這種設計有特定的用途和行為模式:
Headless Service 的核心作用:

  1. 直接訪問 Pod IP,跳過 Service 代理

    • 普通 Service:會分配一個虛擬 ClusterIP,流量通過 kube-proxy 負載均衡到后端 Pod。

    • Headless Service:沒有 ClusterIP,DNS 查詢直接返回所有后端 Pod 的 IP 地址(而非 Service 的虛擬 IP)。

  2. 適用場景

  • 有狀態應用(如 Zookeeper、Kafka、MongoDB):需要直接訪問特定 Pod(如通過 Pod 域名)。

  • 自定義服務發現:應用需要自行處理負載均衡或直接連接 Pod。

  • StatefulSet 配套使用:StatefulSet 的 Pod 具有穩定的域名(如 pod-name.svc-name.namespace.svc.cluster.local)。

1.2 為什么 Zookeeper 使用 Headless Service?

簡單來說,當一個pod 是sts類型,每個副本的名稱,都是固定的(固定名稱是前提,不像deployment生成的pod都會帶隨機字符串 ),如 zk-0、zk-1,此時需要無頭服務,被訪問時,都是指定訪問,不能直接負載均衡隨機調度。

Zookeeper 是一個有狀態分布式協調服務,它的典型配置需求:

支持應用層的負載均衡或服務發現:

  • 客戶端應用(或應用內置的邏輯)可以獲取到所有后端 Pod 的 IP 列表,然后自己決定如何連接(例如,輪詢、根據角色選擇 leader 等)。
  • 對于像 ZooKeeper 這樣的集群,成員之間需要互相知道彼此的地址來形成集群,Headless Service 提供了完美的解決方案。

支持直接的 Pod-to-Pod 通信:

  • 當你需要直接連接到某個特定的 Pod 實例時(比如訪問主節點進行寫操作,或進行健康檢查),可以通過其唯一的 DNS 名稱直接訪問。:StatefulSet + Headless Service 能為每個 Pod 提供固定域名

1.2 Headless Service 的 DNS 行為

對于 Service zookeeper:

  • 普通查詢(非 Headless):

    nslookup zookeeper.mano-2.svc.cluster.local
    

    返回一個虛擬 ClusterIP。

  • Headless 查詢:

    nslookup zookeeper.mano-2.svc.cluster.local
    

    返回所有后端 Pod 的 IP 地址(例如):

    Name:   zookeeper.mano-2.svc.cluster.local
    Address: 10.244.1.10  # zk-0 的 IP
    Address: 10.244.2.20  # zk-1 的 IP
    Address: 10.244.3.30  # zk-2 的 IP
    

如果您的 ZooKeeper StatefulSet 有 3 個副本,名為 zk-0, zk-1, zk-2,那么 DNS 會解析:

  • zookeeper.default.svc.cluster.local -> 返回 zk-0, zk-1, zk-2 的 IP 地址列表(A 記錄)。
  • zk-0.zookeeper.default.svc.cluster.local -> 返回 zk-0 Pod 的 IP 地址。
  • zk-1.zookeeper.default.svc.cluster.local -> 返回 zk-1 Pod 的 IP 地址。
  • zk-2.zookeeper.default.svc.cluster.local -> 返回 zk-2 Pod 的 IP 地址。

1.3 驗證示例

1、查看 Service 定義

kubectl get svc zookeeper -o yaml
輸出關鍵字段:

spec:clusterIP: None  # 明確標記為 Headlessports:- port: 2181targetPort: 2181selector:app: zookeeper

2、通過 DNS 直接訪問 Pod
每個 StatefulSet 的 Pod 會獲得獨立域名:

# 查詢單個 Pod 的 DNS
nslookup zk-0.zookeeper.mano-2.svc.cluster.local# 客戶端連接示例(Zookeeper 客戶端)
zkCli.sh -server zk-0.zookeeper:2181,zk-1.zookeeper:2181,zk-2.zookeeper:2181

與普通 Service 的對比:

特性Headless Service普通 Service
ClusterIPNone自動分配虛擬 IP (如 10.96.x.x)
DNS 解析結果返回所有 Pod IP返回 Service 的 ClusterIP
負載均衡由客戶端或應用層實現由 kube-proxy 實現(iptables/IPVS)
典型應用場景有狀態服務(如 Zookeeper、MySQL)無狀態服務(如 Nginx、微服務)

1.4 如何創建 Headless Service?

Headless 示例:

apiVersion: v1
kind: Service
metadata:name: zookeepernamespace: default
spec:clusterIP: None # 這是關鍵,指定為 Noneports:- port: 2181name: client- port: 2888name: server- port: 3888name: leader-electionselector:app: zookeeper # 選擇后端 Pod 的標簽# 注意:Headless Service 通常不指定 type,默認就是 ClusterIP
  • clusterIP: None:這不是“不想要 IP”,而是明確地、主動地要求創建一個 Headless Service(無頭服務)。它告訴 Kubernetes:“我不要你為這個服務分配一個虛擬的 ClusterIP,我要直接訪問后端的 Pod”。
  • 自動分配 ClusterIP:這是 Kubernetes Service 的默認行為。你不需要做任何特殊配置來“開啟”自動分配。

有頭示例:

apiVersion: v1
kind: Service
metadata:name: my-web-service
spec:# 注意:這里完全不寫 clusterIP 字段ports:- port: 80targetPort: 8080protocol: TCPname: httpselector:app: my-web-app# type: ClusterIP # type 字段也可以省略,默認就是 ClusterIP

當你創建這個 Service 時,Kubernetes 會:

  • 自動從集群的 Service IP 池(由 --service-cluster-ip-range 參數定義)中選擇一個可用的 IP 地址。
  • 將這個 IP 地址分配給該 Service。
  • 你可以在 kubectl get svc 的輸出中看到這個分配的 IP(不再是 None)。

2. zk-0.zookeeper.default.svc.cluster.local 域名是如何創建出來的? 是無頭服務自動映射的嗎

是的,zk-0.zookeeper.default.svc.cluster.local 這個域名是由 Kubernetes 的 Headless Service(無頭服務)機制自動創建的,其核心原理依賴于 Kubernetes DNS 系統(如 CoreDNS)的自動服務發現功能。

下面簡述其工作原理:

1、 前提條件:Headless Service + StatefulSet
這個域名的自動生成,通常發生在以下組合中:

  • 一個 Headless Service:clusterIP: None
  • 一個 StatefulSet:管理有狀態應用的 Pod,如 zk-0, zk-1, zk-2

2、DNS 自動映射原理
當滿足上述條件時,Kubernetes DNS 組件(如 CoreDNS)會根據以下規則自動為每個 Pod 生成穩定的 DNS 記錄:

規則一:Pod 主機名 DNS 記錄
對于每一個由 StatefulSet 創建的 Pod(如 zk-0),DNS 會生成一條 A 記錄:

<pod-name>.<service-name>.<namespace>.svc.cluster.local  -->  <pod-ip>

在你的例子中:

pod-name = zk-0
service-name = zookeeper
namespace = default
cluster.local = 集群默認域名

在這里插入圖片描述

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

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

相關文章

scikit-learn/sklearn學習|套索回歸Lasso解讀

【1】引言 前序學習進程中&#xff0c;對用scikit-learn表達線性回歸進行了初步解讀。 線性回歸能夠將因變量yyy表達成由自變量xxx、線性系數矩陣www和截距bbb組成的線性函數式&#xff1a; y∑i1nwi?xibwTxby\sum_{i1}^{n}w_{i}\cdot x_{i}bw^T{x}byi1∑n?wi??xi?bwTxb實…

暴雨服務器:以定制化滿足算力需求多樣化

在數字經濟與實體經濟深度融合的浪潮下&#xff0c;互聯網行業正經歷著前所未有的技術變革。大數據分析、云計算服務、人工智能算法等技術的快速演進&#xff0c;推動著企業對于高性能計算基礎設施的需求呈現指數級增長。據IDC數據顯示&#xff0c;互聯網行業已成為全球服務器采…

JavaScript字符串詳解

創建字符串&#xff1a; 1.使用字面量(推薦)&#xff1a; 這是最常用、最直接的方式。你可以用單引號 ()、雙引號 (") 或反引號 () 把文本包起來 let singleQuote 單引號; let doubleQuote "雙引號"; let templateLiteral 反引號;2.使用String 構造函數&…

Kiro Preview 應用評測

Kiro應用評測 Kiro 是一個由亞馬遜推出的 AI 驅動的智能開發環境&#xff0c;從原型到生產全程陪伴您的開發過程。它將"靈感編程"的流暢性與規范的清晰性相結合&#xff0c;幫助您更快地構建更好的軟件。 昨天收到了Kiro的試用郵件&#xff0c;收到郵件后第一時間下載…

Flink2.0學習筆記:Flink服務器搭建與flink作業提交

一&#xff0c;下載flink:Downloads | Apache Flink,解壓后放入IDE工作目錄&#xff1a;我這里以1.17版本為例 可以看到&#xff0c;flink后期的版本中沒有提供window啟動腳本:start-cluster.bat 所以這里要通過windows自帶的wsl 系統啟動它 打開終端依次運行下列命令完成w…

MySQL鎖的分類

MySQL鎖可以按照多個維度進行分類&#xff0c;下面我用最清晰的方式為你梳理所有分類方式&#xff1a;一、按鎖的粒度分類&#xff08;最常用分類&#xff09;鎖類型作用范圍特點適用引擎示例場景表級鎖整張表開銷小、加鎖快&#xff0c;并發度低MyISAM, MEMORY數據遷移、全表統…

電腦上搭建HTTP服務器在局域網內其它客戶端無法訪問的解決方案

在電腦上開發一套HTTP服務器的程序在調試時&#xff0c;在本機內訪問正常&#xff0c;但是在本機外訪問就不正常&#xff0c;外部客戶端無法訪問或無法連接到本機的服務器的問題&#xff0c;這可能涉及網絡配置、防火墻、端口轉發或服務綁定等問題&#xff0c;在這里提供了解決…

雙指針和codetop2(最短路問題BFS)

雙指針和codetop21.雙指針1.[復寫0](https://leetcode.cn/problems/duplicate-zeros/)2.動態規劃1.[珠寶的最高價值](https://leetcode.cn/problems/li-wu-de-zui-da-jie-zhi-lcof/description/)2.[解碼方法](https://leetcode.cn/problems/decode-ways/)3.[下降路徑最小和](ht…

基于K鄰近算法(KNN)的數據回歸預測模型

一、作品詳細簡介 1.1附件文件夾程序代碼截圖 全部完整源代碼&#xff0c;請在個人首頁置頂文章查看&#xff1a; 學行庫小秘_CSDN博客https://blog.csdn.net/weixin_47760707?spm1000.2115.3001.5343 1.2各文件夾說明 1.2.1 main.m主函數文件 該MATLAB代碼實現了一個基于…

【123頁PPT】化工行業數字化解決方案(附下載方式)

篇幅所限&#xff0c;本文只提供部分資料內容&#xff0c;完整資料請看下面鏈接 https://download.csdn.net/download/2501_92808859/91654005 資料解讀&#xff1a;【123頁PPT】化工行業數字化解決方案 詳細資料請看本解讀文章的最后內容。化工行業作為國民經濟的重要支柱之…

c++--文件頭注釋/doxygen

文件頭注釋 開源項目&#xff1a; /*** file robot_base.cpp* author Mr.Wu* date 2025-05-28* version 1.0.0* brief Robot basic drive to communicate with controller** copyright Copyright (c) 2025 google.** Licensed under the Apache License, Version 2.…

【教程】筆記本安裝FnOS設置合蓋息屏不休眠

重裝FnOS好幾次了&#xff0c;合蓋后屏幕關閉但不休眠的問題每次都要網上找參差不齊的教程&#xff0c;麻煩死了&#xff0c;索性記錄一下方便以后復制粘貼。 使用root登錄 sudo -i修改系統配置文件編輯logind.conf文件&#xff1a; 打開終端&#xff0c;輸入以下命令以編輯log…

深入解析 Monkey OCR:本地化、多語言文本識別的利器與實踐指南

在信息爆炸的時代&#xff0c;從圖片、掃描文檔中高效提取結構化文本的需求日益迫切。OCR&#xff08;光學字符識別&#xff09;技術成為解決這一問題的核心工具。盡管市面上有 Abbyy FineReader、Adobe Acrobat 等商業巨頭&#xff0c;以及 Tesseract、PaddleOCR 等開源方案&a…

動態規劃法 - 53. 最大子數組和

什么是動態規劃法&#xff1f; 簡單說&#xff0c;動態規劃&#xff08;Dynamic Programming&#xff0c;簡稱 DP&#xff09; 是一種**「把復雜問題拆解成小問題&#xff0c;通過解決小問題來解決大問題」**的方法。 核心思路有兩個&#xff1a; 1.拆分問題&#xff1a;把原問…

STM32CUBEMX配置stm32工程

1.新建工程2.選擇芯片3.配置各種片上外設和時鐘4.創建工程5.根據文件內容進行修改工程注意&#xff1a;最好根據工程規范來做&#xff0c;因為有時我們需要更改配置并重新生成&#xff0c;如果不按規范來會導致部分代碼會被系統清除&#xff0c;在工程中中有很多成對的BEGIN和E…

Day07 緩存商品 購物車

緩存菜品問題說明用戶端小程序展示的菜品數據都是通過查詢數據庫獲得&#xff0c;如果用戶端訪問量比較大&#xff0c;數據庫訪問壓力隨之增大。結果&#xff1a;系統響應慢&#xff0c;用戶體驗差實現思路通過 Redis 來緩存菜品數據&#xff0c;減少數據庫查詢操作。緩存邏輯分…

Jenkins(集群與流水線配置)

Jenkins&#xff08;集群與流水線配置&#xff09; Jenkins集群 集群化構建可以提升構建效率&#xff0c;也可以并發在多臺機器上執行構建。 安裝前提&#xff1a;內存至少512MB、Java 17 以上、Maven環境、Git環境 配置集群步驟 配置節點菜單新建節點查看節點配置狀態 新建完節…

深入剖析ROS參數服務器通信機制 ——共享全局數據的“云端倉庫”實現原理

?1. 核心概念&#xff1a;分布式數據共享容器? ?定位?&#xff1a;ROS參數服務器&#xff08;Parameter Server&#xff09;是ROS架構中的全局共享存儲系統&#xff0c;相當于機器人的“云端倉庫”。 ?作用?&#xff1a; 存儲多節點共享的靜態配置參數&#xff08;如機器…

21.AlexNet

雖然LeNet在手寫數字識別上取得了不錯的結果&#xff0c;但是他在對于更大的數據集效果就十分有限。 一方面&#xff0c;對于更大尺寸的圖像效果有限 另一方面&#xff0c;對于更多分類的任務效果有限 自LeNet后的十幾年&#xff0c;計算機視覺領域步入寒冬&#xff0c;神經網絡…

Shell腳本-條件判斷相關參數

一、前言在 Shell 腳本編程中&#xff0c;條件判斷 是實現流程控制的核心機制之一。無論是判斷文件是否存在、字符串是否相等&#xff0c;還是數值大小比較&#xff0c;都離不開條件判斷語句。本文將帶你全面掌握 Shell 腳本中與條件判斷相關的參數和語法&#xff0c;包括&…