当前位置: 首页 > news >正文

Kubernetes的endpoint

简介

Kubernetes的endpoint(终结点)是用于将服务绑定到集群中其他组件的网络地址。Endpoint为服务提供了一个稳定的虚拟IP地址,它会负责将流量从Service路由到后端Pod。

下面是使用Kubernetes的endpoint的详细步骤:

  1. 创建一个Service资源定义,该Service将绑定到一组Pod:
apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: backendports:- protocol: TCPport: 8080targetPort: 80

该示例创建了一个名为my-service的Service,它将选择带有"app=backend"标签的Pod,并将流量路由到Pod的80端口。

  1. Kubernetes将在集群中的每个节点上创建一个虚拟IP(ClusterIP),用于表示Service。

  2. 创建一个Endpoint资源定义,将Service绑定到后端Pod的IP地址和端口:

apiVersion: v1
kind: Endpoints
metadata:name: my-service
subsets:- addresses:- ip: 10.0.0.1- ip: 10.0.0.2ports:- port: 80

该示例创建了一个名为my-service的Endpoint,该Endpoint将流量路由到两个IP地址为10.0.0.1和10.0.0.2的Pod的80端口。

  1. Kubernetes会自动将创建的Endpoint与Service进行关联,使得Service可以通过Endpoint来发现后端Pod,并进行负载均衡。

当使用该Service进行通信时,Kubernetes会将流量路由到该Service的虚拟IP地址,然后通过Endpoint将流量转发到后端Pod的实际IP地址和端口。

举个例子,假设我们有一个运行两个Pod的应用程序,并且这些Pod具有"app=backend"的标签。我们创建了一个Service来暴露这两个Pod,并使用Endpoint将它们绑定到Service。现在,我们可以使用Service的虚拟IP地址来与后端Pod进行通信,而不必关心具体的后端Pod IP地址。

请注意,Endpoint是由Kubernetes自动管理的,并且通常不需要直接进行手动操作。它主要用于内部流量路由和服务发现。

注意的地方

Endpoint是可被访问的服务端点,即一个状态为running的pod,它是service的访问的落点,只有service关联的pod才可能成为endpoint。

Endpoint、service和pod的关系:
在这里插入图片描述
Endpoints表示一个Service对应的所有pod副本的访问地址。

Node上的Kube-proxy进程获取每个Service的Endpoints,实现service的负载均衡功能。

在这里插入图片描述

Endpoints Controller

Endpoints Controller就是负责生成和维护所有Endpoints对象的控制器,它负责监听Service和对应的Pod副本的变化。

如果检测到Service被删除,则删除和该Service同名的Endpoints对象。

如果检测到新的Service被创建或者修改则根据该Service信息获得相关的Pod列表,然后创建或者更新Service对应的Endpoints对象。

外部服务与endpoints

手动创建endpoints,添加外部服务的endpoint,可以将外部服务作为kubernetes的service使用。
etcd有3节点部署在外部,为其创建service: etcd-k8s,不指定podSelector:

apiVersion: v1
kind: Service
metadata:name: etcd-k8snamespace: kube-system
spec:type: ClusterIPports:- name: portport: 2379protocol: TCP

创建同名的endpoints资源: etcd-k8s,将etcd节点的ip+port填进去:

apiVersion: v1
kind: Endpoints
metadata:name: etcd-k8snamespace: kube-system
subsets:
- addresses:- ip: 178.104.163.38nodeName: etc-master1- ip: 178.104.163.187nodeName: etc-master2- ip: 178.104.163.243nodeName: etc-master3ports:- name: portport: 2379protocol: TCP

这样,通过serviceName.namespace:port就可以在kubernetes集群内访问外部的etcd服务:

etcd-k8s.kube-system:2379

http://www.lryc.cn/news/130605.html

相关文章:

  • 第四章,向量组,2-矩阵等价与向量组等价的关系
  • Flink源码之StreamTask启动流程
  • 【BASH】回顾与知识点梳理(三十)
  • 亿赛通电子文档安全管理系统任意文件上传漏洞复现
  • java:数据库连接池
  • 可视化绘图技巧100篇基础篇(三)-条形图(一)
  • 如何使用Redis实现附近商家查询
  • 于vue3+vite+element pro + pnpm开源项目
  • 18-组件化开发 根组件
  • springboot集成ES
  • Maven 生成编译时间和版本Java类
  • 关于uniapp微信小程序scroll-view组件使用show-scrollbar隐藏不了滚动条
  • CSS:filter滤镜 详解(用法 + 代码 + 例子 + 效果)
  • 【Unity每日一记】Physics.Raycast 相关_Unity中的“X光射线”
  • 软件报错msvcr90.dll丢失的解决方法,亲测可以修复
  • 第一百一十八回 如何获取蓝牙连接状态
  • C++11并发与多线程笔记(12) windows临界区、其他各种mutex互斥量
  • [MAUI]在.NET MAUI中实现可拖拽排序列表
  • Linux 内核内存管理 pfn_to_online_page宏
  • 『C语言初阶』第八章 -结构体
  • chatgpt汇编,两个关于chatgpt的问题
  • ps丢失d3dcompiler_47.dll怎么办,启动无反应,分享三个解决方法
  • 第三章nginx详解
  • 【二叉树前沿篇】树
  • python3 0基础学习----数据结构(基础+练习)
  • 计算机科学中的“旅行商问题”
  • QT:自定义控件(Connect使用,子控件连接)
  • 目录——车载网络安全
  • Visual Studio 如何放大代码字体的大小
  • Verilog同步FIFO设计