【一起來學kubernetes】12、k8s中的Endpoint詳解

      • 一、Endpoint的定義與作用
      • 二、Endpoint的創建與管理
      • 三、Endpoint的查看與組成
      • 四、EndpointSlice
      • 五、Endpoint的使用場景
      • 六、Endpoint與Service的關系
        • 1、定義與功能
        • 2、創建與管理
        • 3、關系與交互
        • 4、使用場景與特點
      • 七、Endpoint的kubectl命令
        • 1. 查看Endpoint
        • 2. 創建Endpoint
        • 3. 編輯Endpoint
        • 4. 刪除Endpoint

在Kubernetes(簡稱K8s)中,Endpoint是一個非常重要的資源,它主要用于表示和管理服務(Service)所暴露的網絡地址(IP地址和端口)。

在這里插入圖片描述

一、Endpoint的定義與作用

  1. 定義:Endpoint是K8s中用于描述Service實際訪問點的資源。它包含了提供服務的Pod的IP地址和端口信息,這些信息是K8s實現服務發現和流量分發的關鍵依據。

  2. 作用

    • 服務發現:通過記錄具體Pod的網絡信息,讓外部請求能夠準確找到提供服務的實例。
    • 負載均衡:K8s使用Endpoints來將流量路由到正確的Pod上,以實現負載均衡。
    • 關聯Service與Pod:Endpoint的主要作用是將Service與后端Pod關聯起來,確保服務請求能夠被正確地路由到可用的Pod實例上,實現了服務的高可用性和負載均衡。

在這里插入圖片描述

二、Endpoint的創建與管理

  1. 自動創建:在K8s中,當創建一個Service時,K8s會根據Service的選擇器(Selector)自動發現匹配的Pod,并創建相應的Endpoint。這種自動化的創建機制大大簡化了服務部署和管理的流程。
  2. 手動創建:雖然不常見,但Endpoint也可以手動創建。這通常用于特殊情況,比如需要顯式指定Endpoint的IP地址和端口,例如在與外部非K8s管理的服務進行集成時,可能需要手動創建Endpoint來定義服務的訪問信息,以便將其納入K8s的服務管理體系中。
  3. Endpoint控制器:K8s的Endpoint控制器負責監控Service和Pod的變化,并自動更新Endpoint的信息。例如,當一個新的Pod創建時,Endpoint控制器會將該Pod的IP地址和端口添加到對應的Endpoint中;同樣,當Pod被刪除或發生故障時,Endpoint控制器也會及時更新Endpoint信息,確保服務的流量始終能夠分發到健康的Pod實例上。

在這里插入圖片描述

三、Endpoint的查看與組成

  1. 查看Endpoint:可以使用kubectl get endpoints命令來查看默認命名空間的Endpoint。輸出結果會列出每個Service對應的Endpoint,包括IP地址和端口信息。

  2. Endpoint的組成

    • IP地址:Pod或其他網絡服務的IP地址。
    • 端口:服務暴露的端口。
    • TargetRef:指向實際目標(Pod)的引用,通常包括Pod的名稱和命名空間。

在這里插入圖片描述

四、EndpointSlice

  1. 概念:為了提高Endpoint的管理效率,K8s 1.21引入了EndpointSlice資源。EndpointSlice將Endpoint分片管理,每個EndpointSlice包含一組Endpoint,避免了單個Endpoint資源過大帶來的性能問題。

  2. 優勢

    • 增強擴展性:支持更大規模的集群和更多的Endpoint。
    • 提高性能:在大規模集群環境下,EndpointSlice能夠更好地適應不斷增長的服務和Pod數量,保證服務發現和流量分發的高效運行。

在這里插入圖片描述

五、Endpoint的使用場景

  1. 集群內部服務訪問:在K8s集群內部,Pod可以通過Service的名稱訪問到后端的Pod,而Service則是通過Endpoint來實現這一功能的。
  2. 集群外部服務訪問:在實際使用場景中,K8s集群有時需要訪問集群外部的服務。這時,可以通過手動創建Endpoint或使用endpoints-operator等工具來自動管理外部服務的Endpoint,實現集群內部Pod對外部服務的訪問。

在這里插入圖片描述

六、Endpoint與Service的關系

在Kubernetes(K8s)中,Service和Endpoint是兩個緊密相關但功能不同的資源。以下是它們之間的主要區別:

1、定義與功能
  1. Service

    • 定義:Service是K8s中的一個抽象層,它定義了一種訪問Pod集合的方式。
    • 功能:Service允許通過統一的接口訪問一組執行相同功能的Pod,無論這些Pod如何變化、擴展或縮減。它提供了服務發現和負載分發的功能,通過負載均衡器將網絡流量分發到后端的Pod集合。
  2. Endpoint

    • 定義:Endpoint是K8s中的一種資源,用于描述Service的實際訪問點。
    • 功能:Endpoint包含了提供服務的Pod的IP地址和端口信息,這些信息是K8s實現服務發現和流量分發的關鍵依據。它像一座橋梁,連接了抽象的服務訪問入口(Service)和實際提供服務的工作負載(Pod)。
2、創建與管理
  1. Service

    • 通常通過YAML文件或kubectl命令創建。
    • 創建時,需要指定選擇器(Selector)以匹配后端Pod。
    • K8s會根據選擇器自動發現匹配的Pod,并創建相應的Endpoint。
  2. Endpoint

    • 在大多數情況下,Endpoint是自動創建的,與Service相關聯。
    • 也可以手動創建Endpoint,但這通常用于特殊情況,如與外部非K8s管理的服務進行集成。
    • Endpoint的信息由Endpoint控制器監控和更新,以確保與Service和Pod的狀態保持一致。
3、關系與交互
  1. 關系

    • Service是抽象層,定義了訪問Pod集合的策略。
    • Endpoint是實際實現,包含了Service的流量分發目標(即Pod的IP地址和端口)。
  2. 交互

    • 當外部請求訪問Service時,K8s會根據Endpoint信息將請求路由到正確的Pod實例上。
    • Service通過與Endpoint的映射關系,實現了服務的抽象化和負載均衡。
4、使用場景與特點
  1. Service

    • 適用于需要訪問一組Pod的場景,提供了負載均衡、服務發現和抽象等功能。
    • 支持多種訪問模式,如ClusterIP、NodePort、LoadBalancer和ExternalName。
  2. Endpoint

    • 主要用于描述Service的實際訪問點,通常不需要直接管理。
    • 在特殊情況下,如與外部服務集成時,可能需要手動創建和管理Endpoint。

Service和Endpoint在K8s中扮演著不同的角色。Service是抽象層,定義了訪問Pod集合的策略;而Endpoint是實際實現,包含了Service的流量分發目標。它們通過緊密協作,實現了服務發現和負載均衡等功能,為K8s集群中的服務提供了高效、穩定的運行環境。

在這里插入圖片描述

七、Endpoint的kubectl命令

與Kubernetes(K8s)中的Endpoint相關的kubectl命令主要用于查看、創建、編輯和刪除Endpoint資源。以下是一些常用的kubectl命令及其用法:

1. 查看Endpoint

要查看K8s集群中的Endpoint列表,可以使用以下命令:

kubectl get endpoints

這將顯示集群中所有Endpoint的列表,包括它們的名稱、命名空間、IP地址和端口號等信息。如果只想查看特定命名空間中的Endpoint,可以添加-n選項,后面跟命名空間的名稱:

kubectl get endpoints -n your-namespace
2. 創建Endpoint

雖然Endpoint通常是由K8s自動創建的,與Service相關聯,但在某些特殊情況下,也可以手動創建Endpoint。這通常涉及編寫一個YAML文件來描述Endpoint資源,然后使用kubectl apply命令將其應用到集群中。

以下是一個創建Endpoint的YAML文件示例:

apiVersion: v1
kind: Endpoints
metadata:name: my-endpoint
subsets:- addresses:- ip: 192.168.1.1ports:- port: 80protocol: TCP

應用這個YAML文件到集群中:

kubectl apply -f my-endpoint.yaml
3. 編輯Endpoint

要編輯現有的Endpoint資源,可以使用kubectl edit命令。這將打開一個文本編輯器(通常是系統默認的編輯器,如vim或nano),允許你修改Endpoint的相關信息。

kubectl edit endpoints my-endpoint

在編輯器中,你可以找到和修改Endpoints的相關信息,如subsets、addresses和ports。完成編輯后,保存并退出編輯器,K8s將應用你的更改。

4. 刪除Endpoint

要刪除特定的Endpoint資源,可以使用kubectl delete endpoints命令。這將從K8s集群中移除指定的Endpoint。

kubectl delete endpoints my-endpoint

請注意,手動創建、編輯和刪除Endpoint通常不是K8s的標準做法。在大多數情況下,K8s會自動管理Endpoint資源,以確保它們與Service和Pod的狀態保持一致。手動操作Endpoint可能會導致服務發現和負載均衡問題,因此應謹慎進行。

Endpoint在K8s中扮演著至關重要的角色,它實現了Service與后端Pod的關聯、服務發現和負載均衡等功能。通過合理管理和使用Endpoint,可以確保K8s集群中的服務能夠高效、穩定地運行。

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

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

相關文章

結構型模式之橋接模式:解耦抽象和實現

在面向對象設計中,我們經常遇到需要擴展某些功能,但又不能修改現有代碼的情況。為了避免繼承帶來的復雜性和維護難度,橋接模式(Bridge Pattern)應運而生。橋接模式是一種結構型設計模式,旨在解耦抽象部分和…

如何用Java將實體類轉換為JSON并輸出到控制臺?

在軟件開發的過程中,Java是一種廣泛使用的編程語言,而在眾多應用中,數據的傳輸和存儲經常需要使用JSON格式。JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,易于人類閱讀和編寫,…

Vue3 開發的 VSCode 插件

1. Volar Vue3 正式版發布,Vue 團隊官方推薦 Volar 插件來代替 Vetur 插件,不僅支持 Vue3 語言高亮、語法檢測,還支持 TypeScript 和基于 vue-tsc 的類型檢查功能。 2. Vue VSCode Snippets 為開發者提供最簡單快速的生成 Vue 代碼片段的方…

C# Enumerable類 之 集合操作

總目錄 前言 在 C# 中,System.Linq.Enumerable 類是 LINQ(Language Integrated Query)的核心組成部分,它提供了一系列靜態方法,用于操作實現了 IEnumerable 接口的集合。通過這些方法,我們可以輕松地對集合…

51c自動駕駛~合集54

我自己的原文哦~ https://blog.51cto.com/whaosoft/13517811 #Chameleon 快慢雙系統!清華&博世最新:無需訓練即可解決復雜道路拓撲 在自動駕駛技術中,車道拓撲提取是實現無地圖導航的核心任務之一。它要求系統不僅能檢測出車道和交…

Spring Cloud Eureka - 高可用服務注冊與發現解決方案

在微服務架構中,服務注冊與發現是確保系統動態擴展和高效通信的關鍵。Eureka 作為 Spring Cloud 生態的核心組件,不僅提供去中心化的服務治理能力,還通過自我保護、健康檢查等機制提升系統的穩定性,使其成為微服務架構中的重要支撐…

Unity屏幕適配——立項時設置

項目類型:2D游戲、豎屏、URP 其他類型,部分原理類似。 1、確定設計分辨率:750*1334 為什么是它? 因為它是 iphone8 的尺寸,寬高比適中。 方便后續適配到真機的 “更長屏” 或 “更寬屏” 2、在場景…

深度學習中LayerNorm與RMSNorm對比

LayerNorm不同于BatchNorm,其與batch大小無關,均值和方差 在 每個樣本的特征維度 C 內計算, 適用于 變長輸入(如 NLP 任務中的 Transformer) 詳細的BatchNorm在之前的一篇文章進行了詳細的介紹:深度學習中B…

使用WireShark解密https流量

概述 https協議是在http協議的基礎上,使用TLS協議對http數據進行了加密,使得網絡通信更加安全。一般情況下,使用WireShark抓取的https流量,數據都是加密的,無法直接查看。但是可以通過以下兩種方法,解密抓…

數字化轉型 - 數據驅動

數字化轉型 一、 數據驅動1.1 監控1.2 分析1.3 挖掘1.4 賦能 二、數據驅動案例2.1 能源工業互聯網:綠色節能的數字化路徑2.2 光伏產業的數字化升級2.3 數據中心的綠色轉型2.4云遷移的質效優化2.5 企業數字化運營的實踐2.6數字化轉型的最佳實踐 一、 數據驅動 從數…

解決 Docker 鏡像拉取超時問題:配置國內鏡像源

在使用 Docker 的過程中,經常會遇到鏡像拉取超時的問題,尤其是在國內網絡環境下。這不僅會浪費大量的時間,還可能導致一些項目無法順利進行。今天,我將分享一個簡單而有效的解決方法:配置國內鏡像源。 環境 操作系統 c…

Linux命令基礎,創建,輸入,輸出,查看,查詢

什么是命令、命令行 命令行:即:Linux終端(Terminal),是一種命令提示符頁面。以純“字符”的形式操作操作系統,可以使用各種字符化命令對操作系統發出操作指令。 命令:即Linux程序。一個命令就…

【GNU Radio】ZMQ模塊學習

【GNU Radio】ZMQ模塊學習 ZMQ 介紹前置知識Socket通信模型PUB/SUB(發布/訂閱)模型PUSH/PULL(推/拉)模型REQ/REP(請求/響應)模型 ZMQ 詳解基于通信模型分析基于數據格式分析Data BlocksMessage Blocks ZMQ …

【筆記】深度學習模型訓練的 GPU 內存優化之旅:綜述篇

開設此專題,目的一是梳理文獻,目的二是分享知識。因為筆者讀研期間的研究方向是單卡上的顯存優化,所以最初思考的專題名稱是“顯存突圍:深度學習模型訓練的 GPU 內存優化之旅”,英文縮寫是 “MLSys_GPU_Memory_Opt”。…

Vue 3 Diff 算法深度解析:與 Vue 2 雙端比對對比

文章目錄 1. 核心算法概述1.1 Vue 2 雙端比對算法1.2 Vue 3 快速 Diff 算法 2. 算法復雜度分析2.1 時間復雜度對比2.2 空間復雜度對比 3. 核心實現解析3.1 Vue 2 雙端比對代碼3.2 Vue 3 快速 Diff 代碼 4. 性能優化分析4.1 性能測試數據4.2 內存使用對比 5. 使用場景分析5.1 Vu…

神經網絡的基本知識

感知機 輸入:來自其他 n 個神經元傳遞過來的輸入信號 處理:輸入信號通過帶權重的連接進行傳遞, 神經元接受到總輸入值將與神經元的閾值進行比較 輸出:通過激活函數的處理以得到輸出 感知機由兩層神經元組成, 輸入層接受外界輸入信號傳遞給…

UE5與U3D引擎對比分析

Unreal Engine 5(UE5)和Unity 3D(U3D)是兩款主流的游戲引擎,適用于不同類型的項目開發。以下是它們的主要區別,分點整理: 1. 核心定位 UE5: 主打3A級高畫質項目(如主機/P…

C++相關基礎概念之入門講解(上)

1. 命名空間 C中的命名空間(namespace)是用來避免命名沖突問題的一種機制。通過將類、函數、變量等封裝在命名空間中,可以避免不同部分的代碼中出現相同名稱的沖突。在C中,可以使用namespace關鍵字來定義命名空間。 然后我們在調…

網絡協議棧

網絡協議棧的位置 用戶在應用層的各種請求最終會下達給操作系統,操作系統內除了進程管理、文件管理、內存管理、驅動管理之外,還有一個內嵌的軟件協議棧,協議棧將用戶的數據進行各種封包后,通過網卡將數據傳遞到網絡當中&#xf…

C#索引器基礎到實踐

1. 封裝和隱藏內部實現 數組是一個簡單的數據結構,它的內部實現是固定的(基于連續內存)。而索引器可以隱藏內部的實現細節,允許開發者使用更復雜的數據結構來存儲數據,同時對外提供類似數組的訪問方式。 示例: 假設你有一個類,內部使用 Dictionary 或 List 來存儲數據…