重溫k8s基礎概念知識系列四(服務、負載均衡和聯網)

文章目錄

    • 1、Kubernetes 網絡模型
    • 2、為什么需要 Service?
      • 2.1、定義service
      • 2.2、Service的類型
      • 2.3、Service 工作原理
      • 2.4、Service 與 DNS
    • 3、Ingress(高級流量管理)
      • 3.1、定義Ingress 資源
      • 3.2、Ingress 規則
    • 4、常見面試高頻問答
    • 5、總結

1、Kubernetes 網絡模型

Kubernetes 網絡模型由幾個部分構成:

  1. 集群中的每個 Pod 都會獲得自己的、獨一無二的集群范圍 IP 地址。

    • Pod 有自己的私有網絡命名空間,Pod 內的所有容器共享這個命名空間。 運行在同一個 Pod 中的不同容器的進程彼此之間可以通過 localhost 進行通信。
  2. Pod 網絡(也稱為集群網絡)處理 Pod 之間的通信。它確保(除非故意進行網絡分段):

    • 所有 Pod 可以與所有其他 Pod 進行通信, 無論它們是在同一個節點還是在不同的節點上。 Pod 可以直接相互通信,而無需使用代理或地址轉換(NAT)。

    在 Windows 上,這條規則不適用于主機網絡 Pod。

    • 節點上的代理(例如系統守護進程或 kubelet)可以與該節點上的所有 Pod 進行通信。
  3. Service API 允許你為由一個或多個后端 Pod 實現的服務提供一個穩定(長效)的 IP 地址或主機名, 其中組成服務的各個 Pod 可以隨時變化。

    • Kubernetes 會自動管理 EndpointSlice 對象,以提供有關當前用來提供 Service 的 Pod 的信息。

    • 服務代理實現通過使用操作系統或云平臺 API 來攔截或重寫數據包, 監視 Service 和 EndpointSlice 對象集,并在數據平面編程將服務流量路由到其后端。

  4. Gateway API (或其前身 Ingress 使得集群外部的客戶端能夠訪問 Service。

    • 當使用受支持的 云提供商(Cloud Provider) 時,通過 Service API 的 type: LoadBalancer 可以使用一種更簡單但可配置性較低的集群 Ingress 機制。
  5. NetworkPolicy 是一個內置的 Kubernetes API,允許你控制 Pod 之間的流量或 Pod 與外部世界之間的流量。

在早期的容器系統中,不同主機上的容器之間沒有自動連通, 因此通常需要顯式創建容器之間的鏈路,或將容器端口映射到主機端口,以便其他主機上的容器能夠訪問。 在 Kubernetes 中并不需要如此操作;在 Kubernetes 的網絡模型中, 從端口分配、命名、服務發現、負載均衡、應用配置和遷移的角度來看,Pod 可以被視作虛擬機或物理主機。

這個模型只有少部分是由 Kubernetes 自身實現的。 對于其他部分,Kubernetes 定義 API,但相應的功能由外部組件提供,其中一些是可選的:

- Pod 網絡命名空間的設置由實現容器運行時接口(CRI)的系統層面軟件處理。
- Pod 網絡本身由 Pod 網絡實現管理。 在 Linux 上,大多數容器運行時使用容器網絡接口 (CNI) 與 Pod 網絡實現進行交互,因此這些實現通常被稱為 CNI 插件。- Kubernetes 提供了一個默認的服務代理實現,稱為 kube-proxy, 但某些 Pod 網絡實現使用其自己的服務代理,以便與實現的其余組件集成得更緊密。- NetworkPolicy 通常也由 Pod 網絡實現提供支持。 (某些更簡單的 Pod 網絡實現不支持 NetworkPolicy,或者管理員可能會選擇在不支持 NetworkPolicy 的情況下配置 Pod 網絡。在這些情況下,API 仍然存在,但將沒有效果。)- Gateway API 的實現有很多, 其中一些特定于某些云環境,還有一些更專注于“裸金屬”環境,而其他一些則更加通用。

在這里插入圖片描述

2、為什么需要 Service?

Pod 的 IP 不是固定的,Pod 重建時 IP 會變。

應用之間需要 穩定的訪問入口。
👉 Service 提供了一個固定的訪問地址(ClusterIP / DNS),并通過標簽選擇器將流量轉發到后端 Pod。

解決使用Pod IP 訪問應用的問題;

Kubernetes 中 Service 是主要用于Pod之間的通信,相對于Pod的IP它創建完成以后就是不變的資源; 將運行在一個或一組 Pod 上的網絡應用程序公開為網絡服務的方法。

Namespace級別的隔離。

2.1、定義service

最常用的service

apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: demo-nginxports:- protocol: TCPport: 80targetPort: 80name: http

2.2、Service的類型

    - ClusterIP:在集群內部使用的,默認類型- NodePort:在每個宿主機上暴露一個隨機端口,30000-32767,--service-node-port-range,集群外部可訪問。- LoadBalancer:使用云服務商提供的IP地址。成本太高。- ExternalName:反代到指定的域名上。

沒有Selector的service。不會自動創建EndPoints。
192.168.1.100 3306 沒有selector的service的名字+端口進行訪問到192.168.1.100 3306。
172.16.1.100

ClusterIP+Ingress 域名訪問

Service 類型作用使用場景
ClusterIP(默認)僅在集群內訪問微服務之間通信
NodePort在每個節點上開放一個端口(30000-32767),轉發到后端 Pod對外暴露服務(開發/測試)
LoadBalancer使用云廠商負載均衡器,對外提供統一入口云環境生產環境
ExternalName將 Service 映射到外部 DNS 名稱調用外部數據庫/第三方 API
Headless Service不分配 ClusterIP,直接返回 Pod IP數據庫、StatefulSet 場景

2.3、Service 工作原理

kube-proxy 是核心組件,支持兩種主要模式:

  • iptables 模式:通過 iptables 規則轉發流量到后端 Pod。

  • ipvs 模式:基于 Linux IPVS,性能更高,適合大規模集群。

📌 流量路徑:
客戶端 → Service VIP(ClusterIP) → kube-proxy → Pod

2.4、Service 與 DNS

kube-dns/CoreDNS 自動為 Service 創建 DNS 記錄。

訪問方式:

myservice.my-namespace.svc.cluster.local

直接 myservice(同一命名空間)

3、Ingress(高級流量管理)

它是Kubernetes集群中服務的入口,可以提供負載均衡、SSL終止和基于域名的虛擬主機。Treafik、Nginx、HAProxy、Istio。

Ingress 提供從集群外部到集群內服務的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 資源所定義的規則來控制。

  • Service 暴露的是 四層網絡 (TCP/UDP)。

  • Ingress 負責 七層 HTTP/HTTPS 路由,支持:

    • 域名路由(api.example.com → serviceA)

    • URL 路由(/shop → serviceB)

    • SSL 證書管理(HTTPS)

  • 常用 Ingress Controller:

    • Nginx Ingress Controller

    • Traefik

    • HAProxy

在這里插入圖片描述

Ingress 官方文檔:https://kubernetes.io/docs/concepts/services-networking/ingress/

Ingress-Nginx安裝文檔:https://kubernetes.github.io/ingress-nginx/deploy/

Ingress-Nginx 文檔:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/

3.1、定義Ingress 資源

一個最小的 Ingress 資源示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: minimal-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:ingressClassName: nginx-examplerules:- http:paths:- path: /testpathpathType: Prefixbackend:service:name: testport:number: 80

host: 可選參數,一般都會配置我們自己的域名。
path: 一個路徑對應一個serviceName和一個Port
backend: path對應的后端是誰。
foo.bar.com/foo ? service1:4200

Ingress:https://kubernetes.io/docs/concepts/services-networking/ingress/

3.2、Ingress 規則

每個 HTTP 規則都包含以下信息:

  • 可選的 host。在此示例中,未指定 host,因此該規則基于所指定 IP 地址來匹配所有入站 HTTP 流量。 如果提供了 host(例如 foo.bar.com),則 rules 適用于所指定的主機。
  • 路徑列表(例如 /testpath)。每個路徑都有一個由 service.name 和 service.port.name 或 service.port.number 確定的關聯后端。 主機和路徑都必須與入站請求的內容相匹配,負載均衡器才會將流量引導到所引用的 Service,
  • backend(后端)是 Service 文檔中所述的 Service 和端口名稱的組合, 或者是通過 CRD 方式來實現的自定義資源后端。 對于發往 Ingress 的 HTTP(和 HTTPS)請求,如果與規則中的主機和路徑匹配, 則會被發送到所列出的后端。

通常會在 Ingress 控制器中配置 defaultBackend(默認后端), 以便為無法與規約中任何路徑匹配的所有請求提供服務

4、常見面試高頻問答

  • Q1:Pod IP 為什么不能直接對外提供服務?
    👉 Pod IP 動態變化、生命周期不固定,外部客戶端無法直接依賴。

  • Q2:Service 如何選擇后端 Pod?
    👉 通過 Label Selector 機制,所有匹配的 Pod 會加入 Endpoints。

  • Q3:NodePort 的局限性是什么?
    👉 端口范圍有限(30000-32767),跨節點訪問需要 NodeIP,不適合大規模生產。

  • Q4:Ingress 與 LoadBalancer 有什么區別?
    👉

LoadBalancer:提供四層入口,通常由云廠商實現。

Ingress:基于七層應用層路由,更靈活,能做域名/路徑轉發。

  • Q5:Headless Service 的應用場景?
    👉 數據庫集群(如 MySQL、Redis、ZooKeeper、Kafka),需要直接訪問每個 Pod 的真實 IP。

5、總結

Service 解決 Pod 動態 IP 的問題,Ingress 解決復雜的 HTTP 路由問題,LoadBalancer 提供云環境對外統一入口。

在這里插入圖片描述


“人的一生會經歷很多痛苦,但回頭想想,都是傳奇”。


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

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

相關文章

基于SpringBoot的停車場管理系統【2026最新】

作者:計算機學姐 開發技術:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源碼”。 專欄推薦:前后端分離項目源碼、SpringBoot項目源碼、Vue項目源碼、SSM項目源碼、微信小程序源碼 精品專欄:…

Nginx前后端分離反代(VUE+FastAPI)

原文鏈接&#xff1a;Nginx前后端分離反代&#xff08;VUEFastAPI&#xff09; < Ping通途說 0.前言 工作需求自己全棧開發了一個后臺后端&#xff0c;要求前后端分離&#xff0c;即nginx靜態代理前端文件&#xff0c;再代理后端接口。以前自己也遇過這種情況&#xff0c;但…

豆包1.5 Vision Lite 對比 GPT-5-min,誰更適合你?實測AI模型選型利器 | AIBase

“團隊要上線一個智能客服系統&#xff0c;預算有限&#xff0c;中文場景為主&#xff0c;偶爾需要讀圖——該選豆包1.5還是GPT-5-min&#xff1f;” “個人開發者想接大模型API做寫作助手&#xff0c;要求響應快、成本低&#xff0c;Claude Haiku、Moonshot、GPT-5-min 哪個更…

Swift與C++混編深度解決方案:手動橋接 vs SwiftyCPP框架性能終極評測

Swift與C混編深度解決方案&#xff1a;手動橋接 vs SwiftyCPP框架性能終極評測一、技術背景與行業痛點1.1 Swift與C互操作現狀1.2 行業痛點數據二、解決方案架構對比2.1 手動橋接OC中間層實現細節&#xff1a;2.2 SwiftyCPP自動框架技術突破&#xff1a;三、性能深度評測3.1 測…

[Oracle數據庫] Oracle 常用函數

目錄 一、先搞懂這些基礎約定 二、數值函數&#xff1a;處理數字的 “小幫手” 1??MOD (n1, n2)&#xff1a;取余數 2??ROUND (n1 [, n2])&#xff1a;四舍五入 3??TRUNC (n1 [, n2])&#xff1a;截斷&#xff08;不四舍五入&#xff09; 其他常用數值函數 三、字…

Pytorch模型復現筆記-STN(空間注意力Transformer網絡)講解+架構搭建(可直接copy運行)+ MNIST數據集視角調整實驗

Spatial Transformer Networks 本文了講述STN的基本架構&#xff0c;空間幾何注意力模塊的基本原理&#xff0c;冒煙測試以及STN在MNIST數據集用于模型自動調整圖片視角的實驗&#xff0c;如果大家有不懂或者發現了錯誤的地方&#xff0c;歡迎討論。 中文名&#xff1a;空間Tra…

【LeetCode】16. 最接近的三數之和

文章目錄16. 最接近的三數之和題目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;解題思路算法分析問題本質分析排序雙指針法詳解雙指針移動策略搜索過程可視化各種解法對比算法流程圖邊界情況處理時間復雜度分析空間復雜度分析關鍵優化點實際應用場景測試用例設計…

微信小程序實現藍牙開啟自動播放BGM

下面是一個完整的微信小程序實現方案&#xff0c;當藍牙設備連接時自動播放背景音樂(BGM)。實現思路監聽藍牙設備連接狀態當檢測到藍牙設備連接時&#xff0c;自動播放音樂當藍牙斷開時&#xff0c;停止音樂播放處理相關權限和用戶交互完整代碼實現1. 項目結構text/pages/index…

XML 序列化與操作詳解筆記

一、XML 基礎概念XML&#xff08;eXtensible Markup Language&#xff0c;可擴展標記語言&#xff09;是一種用于存儲和傳輸數據的標記語言&#xff0c;由 W3C 制定&#xff0c;具有以下特點&#xff1a;可擴展性&#xff1a;允許自定義標記&#xff08;如<Student>、<…

第八十四章:實戰篇:圖 → 視頻:基于 AnimateDiff 的視頻合成鏈路——讓你的圖片“活”起來,瞬間擁有“電影感”!

AI圖生視頻前言&#xff1a;從“剎那永恒”到“動態大片”——AnimateDiff&#xff0c;讓圖片“活”起來&#xff01;第一章&#xff1a;痛點直擊——靜態圖像到視頻&#xff0c;不是“幻燈片”那么簡單&#xff01;第二章&#xff1a;探秘“時間魔法”&#xff1a;AnimateDiff…

2025深大計算機考研復試經驗貼(已上岸)

如果你在初試出分前看到此貼 我建議&#xff1a; 準備機試和簡歷&#xff0c;即使你不估分&#xff1a;因為如果要準備春招的話&#xff0c;也總要刷題和做簡歷的。盡早估分&#xff0c;查一下往年的復試線&#xff0c;如果有望進復試&#xff0c;可盡早開始準備。 Preface …

用Pygame開發桌面小游戲:從入門到發布

一、引言 Pygame是一個基于Python的跨平臺游戲開發庫,它提供了簡單易用的圖形、聲音和輸入處理功能,非常適合新手入門游戲開發。本文將以"經典游戲合集"項目為例,帶你一步步了解如何使用Pygame開發、打包和發布自己的桌面小游戲。 二、開發環境搭建 安裝Python:…

CSS backdrop-filter:給元素背景添加模糊與色調的高級濾鏡

在現代網頁設計中&#xff0c;半透明元素搭配背景模糊效果已成為流行趨勢 —— 從毛玻璃導航欄、模態框遮罩&#xff0c;到卡片懸停效果&#xff0c;這種設計能讓界面更具層次感和高級感。實現這一效果的核心 CSS 屬性&#xff0c;正是backdrop-filter。它能對元素背后的內容&a…

檢索增強生成(RAG) 緩存增強生成(CAG) 生成中檢索(RICHES) 知識庫增強語言模型(KBLAM)

以下是當前主流的四大知識增強技術方案對比&#xff0c;涵蓋核心原理、適用場景及最新發展趨勢&#xff0c;為開發者提供清晰的技術選型參考&#xff1a; &#x1f50d; 一、RAG&#xff08;檢索增強生成&#xff09;?? 核心原理?&#xff1a; 動態檢索外部知識庫&#xff0…

LLM(大語言模型)的工作原理 圖文講解

目錄 1. 條件概率&#xff1a;上下文預測的基礎 2. LLM 是如何“看著上下文寫出下一個詞”的&#xff1f; 補充說明&#xff08;重要&#xff09; &#x1f4cc; Step 1: 輸入處理 &#x1f4cc; Step 2: 概率計算 &#x1f4cc; Step 3: 決策選擇 &#x1f914; 一個有…

Python netifaces 庫詳解:跨平臺網絡接口與 IP 地址管理

一、前言 在現代網絡編程中&#xff0c;獲取本機的網絡接口信息和 IP 配置是非常常見的需求。 例如&#xff1a; 開發一個需要選擇合適網卡的 網絡服務&#xff1b;在多網卡環境下實現 流量路由與控制&#xff1b;在系統診斷工具中展示 IP/MAC 地址、子網掩碼、默認網關&#x…

HTML應用指南:利用POST請求獲取上海黃金交易所金價數據

上海黃金交易所&#xff08;SGE&#xff09;作為中國唯一經國務院批準、專門從事黃金等貴金屬交易的國家級市場平臺&#xff0c;自成立以來始終秉持“公開、公平、公正”的原則&#xff0c;致力于構建規范、高效、透明的貴金屬交易市場體系。交易所通過完善的交易機制、嚴格的風…

C++常見面試題-1.C++基礎

一、C 基礎 1.1 語言特性與區別C 與 C 的主要區別是什么&#xff1f;C 為何被稱為 “帶類的 C”&#xff1f; 主要區別&#xff1a;C 引入了面向對象編程&#xff08;OOP&#xff09;特性&#xff08;類、繼承、多態等&#xff09;&#xff0c;而 C 是過程式編程語言&#xff1…

Tomcat里catalina.sh詳解

在 Tomcat 中&#xff0c;catalina.sh&#xff08;Linux/macOS&#xff09;或 catalina.bat&#xff08;Windows&#xff09;是 核心的啟動和關閉腳本&#xff0c;用于控制 Tomcat 服務器的運行。它是 Tomcat 的“主控腳本”&#xff0c;負責設置環境變量、啟動/關閉 JVM 進程&…

STM32之MCU和GPIO

一、單片機MCU 1.1 單片機和嵌入式 嵌入式系統 以計算機為核心&#xff0c;tips&#xff1a;計算機【處理單元&#xff0c;內存 硬盤】 可以控制的外部設備&#xff0c;傳感器&#xff0c;電機&#xff0c;繼電器 嵌入式開發 數據源--> 處理器(CPU MCU MPU) --> 執行器 …