【一起来学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.mzph.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 来存储数据…