深入解析 Kubernetes 中的 Service 資源:為應用提供穩定的網絡訪問

什么是 Kubernetes 中的 Service?

在現代微服務架構中,服務之間的通信和負載均衡是至關重要的。尤其是在 Kubernetes 環境中,由于 Pod 是動態創建和銷毀的,如何為一組 Pod 提供穩定的訪問入口,成為了架構設計中的一個關鍵問題。為了解決這個問題,Kubernetes 引入了 Service 資源。

Service 是 Kubernetes 中用于為一組 Pod 提供穩定訪問入口的資源類型。Pod 是短暫的,并且它們的 IP 地址是動態變化的。因此,Service 的作用是通過定義一個穩定的 虛擬 IP 地址DNS 名稱,為外部或集群內的應用提供一致的訪問方式。無論后端的 Pod 如何變化,Service 都能保持訪問接口的一致性。

Service 提供了以下幾種核心功能:

  1. 穩定的訪問入口:Service 會為一組 Pod 提供一個穩定的 IP 地址和 DNS 名稱,避免因為 Pod 的 IP 變動導致無法訪問。
  2. 負載均衡:Service 會自動將流量分配到后端的多個 Pod 上,實現負載均衡。
  3. 服務發現:集群內部的應用可以通過 Service 名稱來發現并訪問目標服務。

Kubernetes 中的 Service 類型

在 Kubernetes 中,Service 主要有四種類型,每種類型適用于不同的場景。下面我們逐一分析這四種 Service 類型及其應用場景。

1. ClusterIP:集群內部訪問

ClusterIP 是 Kubernetes 中的默認 Service 類型,它為 Service 創建一個 集群內部的虛擬 IP 地址,并且只有集群內部的應用可以通過這個 IP 地址來訪問該 Service。外部無法直接訪問該服務。

使用場景:

  • 適用于集群內部的服務通信,常見于微服務架構中,服務之間需要互相訪問。
  • 如前端服務需要訪問后端 API 服務,或者服務與數據庫之間的連接。

示例:

apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: my-appports:- protocol: TCPport: 80       # 對外暴露的端口targetPort: 8080  # 后端 Pod 上的端口

在上面的示例中,Service 會自動分配一個 IP 地址并暴露給集群內部的 Pod。集群內部的應用可以通過 my-service:80 來訪問這個服務。

2. NodePort:集群外部訪問

NodePort 類型的 Service 會在每個集群節點上打開一個端口,任何流量通過該端口訪問集群時,都會被路由到對應的 Service 上。這樣,你就可以通過節點的外部 IP 地址和指定端口來訪問這個 Service。

使用場景:

  • 當你希望將服務暴露到集群外部,或者希望通過某個端口直接訪問 Service。
  • 適用于開發和測試階段,或者在沒有負載均衡器的環境中。

示例:

apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: my-appports:- protocol: TCPport: 80      # 對外暴露的端口targetPort: 8080  # 后端 Pod 上的端口nodePort: 30001    # 節點端口type: NodePort

在這個例子中,Kubernetes 會在每個節點上打開 30001 端口。外部訪問時,可以通過任意節點的 IP 地址和該端口來訪問服務,比如 http://<node-ip>:30001

3. LoadBalancer:云環境外部訪問

LoadBalancer 類型的 Service 適用于云環境,它會為 Service 配置一個外部的負載均衡器,將流量引導到后端的 Pod 上。云服務提供商(如 AWS、Azure、GCP 等)通常會為你創建一個外部負載均衡器,并為你分配一個公共的 IP 地址。

使用場景:

  • 當你希望將 Service 暴露給外部,并且希望使用負載均衡來分發流量。
  • 適用于生產環境,尤其是云環境中對外提供訪問的場景。

示例:

apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: my-appports:- protocol: TCPport: 80      # 對外暴露的端口targetPort: 8080  # 后端 Pod 上的端口type: LoadBalancer

配置該 Service 后,云提供商會自動為你分配一個外部 IP 地址,用戶可以通過該 IP 地址訪問服務。例如,http://<load-balancer-ip>:80

4. ExternalName:外部服務集成

ExternalName 類型的 Service 是將 Kubernetes 集群中的服務映射到外部 DNS 名稱,它不涉及 Kubernetes 集群內部的負載均衡,而是將流量直接轉發到外部服務的 DNS 名稱上。

使用場景:

  • 當你希望將外部服務納入 Kubernetes 集群的服務發現機制時。例如,你希望通過 my-db-service 訪問外部的數據庫服務。

示例:

apiVersion: v1
kind: Service
metadata:name: my-service
spec:type: ExternalNameexternalName: example.com  # 外部服務的 DNS 名稱

在這種配置下,my-service 會解析為 example.com,集群內部的 Pod 可以通過 my-service:80 來訪問 example.com


如何配置 Kubernetes Service?

1. 使用選擇器(Selector)

Service 是通過 選擇器 來確定將流量路由到哪些 Pod。選擇器使用標簽來匹配 Pod,因此你需要確保 Service 的標簽選擇器與目標 Pod 的標簽匹配。

示例:

selector:app: my-app  # 選擇標簽為 app=my-app 的 Pod

這樣,Service 會將流量路由到所有標簽為 app=my-app 的 Pod。

2. 指定端口

每個 Service 都會指定一個端口 (port),它是外部應用訪問服務時使用的端口。還可以指定 targetPort,它是 Pod 內部服務監聽的端口。通常,porttargetPort 可以相同,但你也可以設置不同的端口映射。

示例:

ports:- protocol: TCPport: 80        # Service 對外暴露的端口targetPort: 8080  # 后端 Pod 上的端口

3. 選擇 Service 類型

根據實際需求,選擇合適的 Service 類型。如果你只需要集群內訪問,可以選擇 ClusterIP。如果需要暴露到外部,可以選擇 NodePortLoadBalancer

示例:

type: NodePort  # 可以選擇 ClusterIP, NodePort, LoadBalancer, ExternalName

Service 與 Pod 的關系

在 Kubernetes 中,Pod 是應用的基本部署單元,它包含一個或多個容器,這些容器共享同一個網絡、存儲和命名空間。Pod 是 短暫的,這意味著它們的生命周期是動態的:Pod 的 IP 地址會隨著 Pod 的啟動和銷毀而變化。因此,直接通過 Pod 的 IP 地址進行訪問并不是一個穩定的解決方案。

Service 的引入,正是為了克服這種動態變化的問題。Service 為一組 Pod 提供了一個穩定的 虛擬 IP 地址DNS 名稱,并且它通過負載均衡的方式將流量路由到合適的 Pod 上。Service 的目的是確保即使 Pod 發生了變動,客戶端也能始終通過相同的接口訪問服務,而無需關心后端 Pod 的變化。

  • 穩定的訪問入口:通過提供虛擬 IP 或 DNS 名稱,Service 避免了 Pod IP 地址變化對客戶端訪問的影響。
  • 負載均衡:當有多個 Pod 提供相同服務時,Service 會自動將流量均勻分配到這些 Pod 上。
  • 自動適配 Pod 的動態變化:Service 會自動識別和適應 Pod 的創建、銷毀和擴縮,確保流量始終被轉發到健康的 Pod。
  • 簡化服務發現:通過 DNS 名稱和標簽選擇器,Service 提供了易于管理和使用的服務發現機制。

ServicePod 的關系使得 Kubernetes 能夠高效地管理和擴展應用服務,同時保證服務的穩定性和高可用性。無論是簡單的單一 Pod 服務,還是復雜的多副本負載均衡場景,Service 都為它們提供了強大的支持。

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

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

相關文章

使用Samba網絡磁盤作為MacOS時間機器的遠程備份磁盤

最近考慮MacOS系統升級&#xff0c;所以需要做磁盤備份&#xff0c;MacOS里有個備份磁盤很方便的工具&#xff1a;時間機器&#xff0c;可以自動定期備份磁盤&#xff0c;但是一般需要一個大點的移動硬盤插在macbook上選擇其為備份磁盤&#xff0c;可惜我并沒有移動硬盤&#x…

智能頭盔實時監控系統設計與實現

智能頭盔實時監控系統設計與實現 源碼 https://gitee.com/intostars/csdn-demo/tree/master/src/views/smartHelmet 預覽 一、功能概述 智能頭盔實時監控系統是基于Vue 3和TypeScript開發的一套用于遠程監控和控制智能頭盔設備的前端應用模塊。該系統通過WebSocket與后端服務…

Docker 學習筆記(八):容器運行時工具實踐及 OpenStack 部署基礎

容器管理工具Containerd nerdctl 實踐 nerdctl管理存儲 nerdctl命令創建容器的時候&#xff0c;可以使用-v選項將本地目錄掛載給容器實現數據持久化 示例&#xff1a; [rootlocalhost ~]# mkdir /data [rootlocalhost ~]# nerdctl run -d -v /data:/data busybox -- sleep infi…

Unity鍵盤控制角色運動

以下是一個完整的Unity角色移動和跳躍腳本,支持WASD或方向鍵移動: 使用說明 確保組件設置正確: 確保您的游戲對象有一個CharacterController組件 如果沒有,可以通過菜單 "Component -> Physics -> Character Controller" 添加 相機設置: 確保場景中有一…

linux 宏 DEVICE_ATTR

理解 DEVICE_ATTR DEVICE_ATTR 是 Linux 內核中用于創建設備屬性的宏&#xff0c;通常用于 sysfs 文件系統。通過 sysfs&#xff0c;用戶空間的程序可以讀取或修改內核中的設備屬性。DEVICE_ATTR 宏定義在 <linux/device.h> 頭文件中&#xff0c;用于聲明和定義一個設備屬…

MCP模型上下文協議以及交互流程

1. MCP 是什么全稱&#xff1a;Model Context Protocol定位&#xff1a;讓大語言模型&#xff08;LLM&#xff09;能在“上下文”之外&#xff0c;按統一格式訪問外部數據、調用插件、持久化狀態。動機&#xff1a;以前每家框架&#xff08;LangChain、LlamaIndex 等&#xff0…

MySQLTransactionRollbackException

問題描述mysql部署1主3從&#xff0c;昨天發現主庫有大量報警錯誤&#xff1a;Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction ; Deadlock found when trying to get lock; …

Redis環境搭建指南:Windows/Linux/Docker多場景安裝與配置

Redis環境搭建指南&#xff1a;Windows/Linux/Docker多場景安裝與配置 1. Redis安裝方式概覽 1.1 安裝方式對比 安裝方式適用場景優點缺點難度Windows直接安裝開發調試安裝簡單&#xff0c;Windows兼容好性能不如Linux&#xff0c;生產不推薦?Linux源碼編譯生產環境性能最佳…

leetcode.80刪除有序數組中的重復項2

題目描述 給你一個有序數組 nums &#xff0c;請你 原地 刪除重復出現的元素&#xff0c;使得出現次數超過兩次的元素只出現兩次 &#xff0c;返回刪除后數組的新長度。 不要使用額外的數組空間&#xff0c;你必須在 原地 修改輸入數組 并在使用 O(1) 額外空間的條件下完成。…

運動卡新手入門及常見問題處理

1.新手入門1.1 插卡打開包裝&#xff0c;拿出PCI板卡&#xff0c;如下圖&#xff1a;打開電腦機箱蓋&#xff0c;找到PCI插槽&#xff0c;如下圖&#xff08;紅色框部分是PCI槽&#xff0c;有些主板上PCI槽是白色或其他顏色&#xff09;&#xff1a;插入板卡&#xff0c;如下圖…

PRINCE2與PMP項目管理體系對比

在全球范圍內&#xff0c;PRINCE2與PMP是兩大最具影響力的項目管理體系。PRINCE2注重流程和治理結構&#xff0c;強調“控制”與“規范”&#xff1b;而PMP基于PMBOK指南&#xff0c;強調知識體系和方法論的全面性&#xff0c;更關注“工具”與“實踐”。 不同體系的側重點&…

在UniApp跨平臺開發中實現相機自定義濾鏡的鏈式處理架構

以下是進階方案&#xff1a;架構核心設計分層結構$$Pipeline Capture \otimes Filter_1 \otimes Filter_2 \otimes \cdots \otimes Filter_n \otimes Render$$ 其中&#xff1a;$\otimes$ 表示鏈式處理操作符$Capture$ 為原始圖像采集層$Filter_n$ 為可插拔濾鏡單元$Render$ 為…

Mark5 穿越機電調深度解析:設計、選型、控制與實戰(下)

TIM_SetCompare3 (TIM1, T0 + T1 + T2); // W+? break;? case 3:? // U - 導通,V - 導通,W + 導通? TIM_SetCompare1 (TIM1, T0); // U-? TIM_SetCompare2 (TIM1, T0); // V-? TIM_SetCompare3 (TIM1, T0 + T1 + T2); // W+? break;? case 4:? // U - 導通…

背包問題從入門到入土

我在這里介紹4種常見的背包問題&#xff0c;這里我想按易 --> 難程度從01背包&#xff0c;完全背包&#xff0c;分組背包&#xff0c;多重背包的順序介紹。&#xff08;封面附在最后&#xff09;一&#xff0c;01背包問題&#xff08;后面三個背包問題的基礎&#xff09;01背…

Leetcode 18 java

?????1???????141. 環形鏈表1 題目 ?????1???????141. 環形鏈表 給你一個鏈表的頭節點 head &#xff0c;判斷鏈表中是否有環。 如果鏈表中有某個節點&#xff0c;可以通過連續跟蹤 next 指針再次到達&#xff0c;則鏈表中存在環。 為了表示給定鏈表…

Linux 正則表達式詳解(基礎 + 擴展 + 實操)

Linux 正則表達式詳解&#xff08;基礎 擴展 實操&#xff09; 正則表達式&#xff08;Regular Expression&#xff0c;簡稱 RE&#xff09;是 Linux 文本處理的核心工具&#xff0c;用于定義字符匹配模式&#xff0c;配合 grep、sed、awk 等工具可實現文本過濾、查找、替換等…

Json-rpc通信項目(基于C++ Jsoncpp muduo庫)

一、介紹RPC RPC&#xff08;Remote Procedure Call&#xff09;遠程過程調用&#xff0c;一種通過網絡從遠程計算器上請求服務&#xff0c;而不需要了解底層網絡通信細節&#xff0c;RPC可以使用多種網絡協議進行通信&#xff0c;并且在TCP/IP網絡四層模型中跨越了傳輸層和應…

RL【9】:Policy Gradient

系列文章目錄 Fundamental Tools RL【1】&#xff1a;Basic Concepts RL【2】&#xff1a;Bellman Equation RL【3】&#xff1a;Bellman Optimality Equation Algorithm RL【4】&#xff1a;Value Iteration and Policy Iteration RL【5】&#xff1a;Monte Carlo Learnin…

Redis是什么?一篇講透它的定位、特點與應用場景

Redis是什么&#xff1f;一篇講透它的定位、特點與應用場景 1. Redis的定義與核心概念 1.1 什么是Redis&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff09; 是一個開源的、基于內存的數據結構存儲系統&#xff0c;可以用作數據庫、緩存和消息代理。Redis由…

一款免費開源輕量的漏洞情報系統 | 漏洞情報包含:組件漏洞 + 軟件漏洞 + 系統漏洞

工具介紹 bug_search一款免費開源輕量的漏洞情報系統 基于python3 Amis2.9 開發&#xff0c;僅依賴Flask,requests&#xff0c;無需數據庫&#xff0c;Amis是百度開源的低代碼前端框架漏洞情報包含&#xff1a;組件漏洞 軟件漏洞 系統漏洞 增加郵件發送消息報警功能增加釘釘…