k8s服务注册发现
Service 是 将运行在一个或一组pod上的网络应用程序公开为网络服务的方法。
定义service前端为service名称、ip、端口等不变的部分,后端为符合标签选择的pod集合
注册
- 通过api server提交注册service请求到DNS
- service随后得到clusterIP(虚拟ip地址)
- 在集群内传播service配置
- 集群DNS服务获知该service后,创建必要的DNS记录
service类型
- Headless: 直接采用DNS解析做负载均衡,没有kube-proxy,也没有cluster ip
- ClusterIP: 通过集群ip暴露服务,在域名解析之后会交由kube-proxy进行处理,并分发到pod。
- NodePort: 通过每个节点ip和静态端口暴露服务。这意味着可以暴露服务给外界
- LoadBalancer: 向外暴露服务的外部负载均衡器
- ExternalName: 映射服务和DNS(无代理)
Headless
无负载均衡和clusterIP,可以采用非k8s提供的服务发现机制。此时该服务域名解析结果就是所有关联的pod ip,请求直达pod,此时仅用了DNS解析做负载均衡,而没有利用到k8s内置的kube-proxy

该种方式足够简单,请求链路短。但由于DNS缓存问题,可能会导致DNS服务器压力山大,或者缓存时间过长,导致服务地址没有得到即使更新
clusterIP
通过集群内部IP暴露服务。从集群ip地址池中分配,是默认类型,nodePort、loadBalancer类型也是基于此

相比于headless模式不同之处在于域名解析之后会交由kube-proxy进行处理,并分发到pod。
优势在于避免了直接DNS解析中存在的问题,弊端在于将压力给到了kube-proxy
NodePort
通过每个节点ip和静态端口暴露服务。
从宿主机选择端口分配给某个服务,因此外界也能通过主机和端口进行访问(但仍然要通过kube-proxy进行转发)

优势在于暴露功能到集群外;弊端在于端口数量、选择范围有限以及依然对kube-proxy造成了压力
LoadBalancer
向外暴露的负载均衡。需要第三方支持
以下以openELB为例
拓扑描述如下: 由两个 Pods 支持的服务部署在 Kubernetes 集群中,并为外部访问分配一个 IP 地址172.22.0.2。安装在 Kubernetes 集群中的 OpenELB 与 BGP 路由器建立一个 BGP 连接,并发布指向 BGP 路由器的服务路由。
当外部客户端机器试图访问服务时,BGP 路由器负载根据从 OpenELB 获得的路由平衡master、worker1和worker2节点之间的通信量。在服务流量到达一个节点之后,kube 代理可以进一步将流量转发到其他节点进行负载平衡(Pod 1和 Pod 2都可以通过 kube 代理到达)。

ExternalName
ExternalName映射service到DNS name,而不是诸如my-service、cassandra的典型选择器。
比如在查找my-service.prod.svc.cluster主机时:在本地,集群DNS服务返回一个CNAME记录,值为my.database.example.com。访问my-service的方式与其他服务相同,但有一个关键的区别,重定向发生在DNS级别,而不是通过代理或转发。
service代理模式
- userspace: 最初的模式,将代理交给了用户空间的kube-proxy,但是网络请求的其他处理却仍然在内核空间iptables,效率较低
- iptables: 将代理也交给了内核空间的iptables
- ipvs: 和iptables一样也是基于netfilter,但使用了hash表,这意味着性能将会更高
userspace
- 当客户端请求到达内核空间iptables后,将请求转发给用户空间监听的kube-proxy端口
- kube-proxy处理选择后,转发给pod
由于频繁切换用户空间和内核空间,性能损耗较大,因此已经被废弃
iptables
在这种模式下,kube 代理监视 Kubernetes 控制平面以添加和删除 Service 和 EndpointSlice 对象。
对于每个服务,它安装 iptables 规则,这些规则捕获到服务的集群 IP 和端口的流量,并将该流量重定向到服务的一个后端pod集。对于每个endpoint,它安装 iptables 规则,这些规则选择一个后端 Pod。
默认情况下,iptables 模式下的 kube-proxy 会随机选择一个后端。使用 iptables 处理流量具有较低的系统开销,因为流量由 Linux netfilter 处理,不需要在用户空间和内核空间之间切换。这种方法也可能更可靠。
如果 kube-proxy 在 iptables 模式下运行,并且选择的第一个 Pod 没有响应,则连接失败。这与旧的用户空间模式不同: 在这种情况下,kube-proxy 将检测到与第一个 Pod 的连接失败,并自动使用不同的后端 Pod 重试。您可以使用 Pod 准备状态探测来验证后端 Pods 是否正常工作,这样,iptables 模式下的 kube-proxy 只能看到测试结果为健康的后端。这样做意味着您可以避免通过 kube 代理将流量发送到已知失败的 Pod。
ipvs
在 IPVS 模式下,kube 代理监视 Kubernetes Services 和 EndpointSlices,调用 netlink 接口来创建相应的 IPVS 规则,并定期将 IPVS 规则与 Kubernetes Services 和 EndpointSlices 同步。此控制循环确保 IPVS 状态与所需状态匹配。
当访问一个服务时,IPVS 将流量引导到一个后端 Pods。IPVS 代理模式基于 netfilter 钩子函数,类似于 iptables 模式,但使用哈希表作为底层数据结构,并在内核空间中工作。这意味着在 IPVS 模式下的 kube 代理比在 iptables 模式下的 kube 代理具有更低的延迟重定向流量,在同步代理规则时具有更好的性能。与其他代理模式相比,IPVS 模式还支持更高的网络流量吞吐量。
。此外,ipvs为负载均衡算法提供了更多选项,例如:
rr:轮询调度lc:最小连接数dh:目标哈希sh:源哈希sed:最短期望延迟nq:不排队调度
发现
- DNS 发现:支持集群的 DNS 服务器(例如 CoreDNS)监视 Kubernetes API 中的新 Service,并为每个 Service 创建一组 DNS 记录。 如果在整个集群中都启用了 DNS,则所有 Pod 都应该能够通过 DNS 名称自动解析 Service。
- 环境变量:当 Pod 运行在某 Node 上时,kubelet 会为每个活跃的 Service 添加一组环境变量
Ref
- https://kubernetes.io/docs/concepts/services-networking/service/
- https://tinychen.com/20220627-k8s-09-service-discovery-and-traffic-exposure/
- https://openelb.io/docs/concepts/bgp-mode/
- https://kubernetes.io/docs/reference/networking/virtual-ips/
相关文章:
k8s服务注册发现
Service 是 将运行在一个或一组pod上的网络应用程序公开为网络服务的方法。 定义service前端为service名称、ip、端口等不变的部分,后端为符合标签选择的pod集合 注册 通过api server提交注册service请求到DNSservice随后得到clusterIP(虚拟ip地址&am…...
IK分词器升级,MySQL热更新助一臂之力
ik分词器采用MySQL热更新 官方所给的IK分词器只支持远程文本文件热更新,不支持采用MySQL热更新,没关系,这难不倒伟大的博主,给哈哈哈。今天就来和大家讲一下如何采用MySQL做热更新IK分词器的词库。 一、建立数据库表 CREATE…...
泛微 E-Office文件上传漏洞复现
声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 文章作者拥有对此文章的修改和解释权。如欲转载或传播此文章,…...
bug的生命周期
bug的生命周期 bugbug的生命周期bug等级 bug 当且仅当规格说明书是存在的并且正确的,程序和规格说明书之间的不匹配才是错误当产品规格说明书没有提到时,以用户需求为准,当程序最终没有实现用户的合理预期的功能要求时,就是软件错…...
mysql分库分表相关
3小时快速上手sharding-jdbc 百亿级数据 分库分表 后面怎么分页查询? Java实战:教你如何进行数据库分库分表...
云原生k8s---资源限制、探针
目录 一:资源限制 1、资源限制原因 2、Pod 和 容器 的资源请求和限制 3、CPU 资源单位 4、内存 资源单位 5、事例 (1)事例一 (2)事例二 二:重启策略 1、重启策略模式 2、事例 三:探针…...
html2canvas生成图片地址Base64格式转成blob在转成file(二进制)可正常发送(保姆教程,复制粘贴可用)
开始: 最终结果: 1. html2canvas方法生成的图片地址已Base64编码形式放在img标签src中可直接展示生成的图片(注意页面标签获取位置,还有个setTimeout页面渲染需要时间) setTimeout(function () {var result {};v…...
将Linux上的cpolar内网穿透配置为开机自启动——“cpolar内网穿透”
将Linux上的cpolar内网穿透配置为开机自启动 文章目录 将Linux上的cpolar内网穿透配置为开机自启动前言一、进入命令行模式二、输入token码三、输入内网穿透命令 前言 我们将cpolar安装到了Ubuntu系统上,并通过web-UI界面对cpolar的功能有了初步了解。当然cpolar除…...
微信小程序data-item设置获取不到数据的问题
微信小程序data-item设置获取不到数据的问题 简单说明: 在微信小程序中,通过列表渲染使用wx:for根据数组中的每一项重复渲染组件。同时使用bindtap给每一项绑定点击事件clickItem,再通过data-item绑定数据。 **问题:**通过data-i…...
创建百度百科需要什么条件?
随着互联网的发展,人们越来越依赖于搜索引擎获取信息。百度作为中国最大的搜索引擎之一,旗下的百科词条已成为人们获取知识的重要来源。创建百度百科需要什么条件呢?接下来伯乐网络传媒就来给大家讲一讲。 首先,你需要有一个百度…...
【springboot启动报错】java: 错误: 无效的源发行版:17
报错截图 解决方案 第一步:编辑配置,改为想用的jdk版本 第二步:文件--->项目结构,改为对应的SDK 第三步:文件--->设置--->构建、执行、部署--->编译器--->Java编译器,修改目标字节码版本 第…...
无涯教程-Perl - setservent函数
描述 在第一次调用getservent之前,应先调用此函数。 STAYOPEN参数是可选的,在大多数系统上未使用。当getservent()检索服务数据库中下一行的信息时,然后setervent设置(或重置)枚举到主机条目集的开头。 语法 以下是此函数的简单语法- setservent STAYOPEN返回值 此函数不返…...
Java创建多线程的最全方法
Java创建多线程的最全方法 一、继承Thread,重写run方法二、实现Runnable接口,重写run方法三、使用匿名内部类创建 Thread 子类对象四、使用匿名内部类,实现Runnable接口五、实现Callable接口六、使用线程池创建线程 一、继承Thread࿰…...
02 qt基本控件及信号和槽
一 QString类 功能:显示一个字符串内容 主要接口函数 构造函数: QString(const char *str)QString(const QString &other)赋值运算符重载: QString &operator=(const QString &other)功能函数: 1&...
大数据校招学员实习面试分享
本文实习面试总结来自一位非科班(机械专业)出身的在校生。 作为一个大数据领域的校招实习生,我在这里想分享一下我的经验和教训,希望对大家有所帮助。 1 简历投递准备 在准备简历时,首先需要准确地把握自己的技能和…...
用于弥散加权MRI的关节各向异性维纳滤光片研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
谷粒商城第十一天-品牌管理中关联分类
目录 一、总述 二、前端部分 1. 调整查询调用 2. 关联分类 三、后端部分 四、总结 一、总述 之前是在商品的分类管理中直接使用的若依的逆向代码 有下面的几个问题: 1. 表格上面的参数填写之后,都是按照完全匹配进行搜索,没有模糊匹配…...
Selenium自动化测试实战之自动化测试基础
自动化测试概念 是把以人为驱动的测试转化为机器执行的一种过程,它是一种以程序测试程序的过程。 自动化只是测试方式,跟测试阶段无关。 可以把任何测试工作写一个程序自动化实现都可以称为自动化测试。 selenium自动化测试:2023最新的Sele…...
vue3+vite中使用postcss-px-to-viewport适配问题
适配方案postcss-px-to-viewport使用过程中出现以下问题: postcss-px-to-viewport 不适配最新版本的postcss8 ⚠️报错: postcss-px-to-viewport: postcss.plugin was deprecated. Migration guide: https://evilmartians.com/chronicles/postcss-8-plugin-migrati…...
web测试与app测试的区别
web测试与app测试的区别 首先从系统架构来看的话: web项目,一般都是b/s架构,基于浏览器的,而app则是c/s的,必须要有客户端。那么在系统测试测试的时候就会产生区别了。 web测试只要更新了服务器端,客户端…...
像素剧本圣殿参数详解:Qwen2.5-14B-Instruct温度值、top_p与剧本创意波动关系
像素剧本圣殿参数详解:Qwen2.5-14B-Instruct温度值、top_p与剧本创意波动关系 1. 创作引擎核心参数解析 像素剧本圣殿的核心创作能力源自Qwen2.5-14B-Instruct模型,其中温度值(temperature)和top_p参数直接影响剧本生成的创意表现。这两个参数就像导演…...
STM32duino GNSS库深度解析:Teseo LIV3F驱动与NMEA协议实现
1. 项目概述STM32duino X-NUCLEO-GNSS1A1 是一款面向 STM32 平台的 Arduino 兼容库,专为意法半导体(STMicroelectronics)推出的 X-NUCLEO-GNSS1A1 GNSS 扩展板设计。该扩展板基于意法半导体自研的 Teseo LIV3F 单芯片 GNSS 接收器,…...
编译期类型自省如何拯救百万行遗留代码?C++27静态反射工业改造全链路拆解,从PoC到A/B灰度发布
第一章:编译期类型自省如何拯救百万行遗留代码?C27静态反射工业改造全链路拆解,从PoC到A/B灰度发布在某金融核心交易系统中,127万行C11遗留代码长期依赖宏字符串硬编码实现序列化与配置绑定,导致每次协议变更需人工同步…...
状态机中的人物状态
一,人物惯性移动using System.Collections; using System.Collections.Generic; using UnityEngine;public class CharMove3 : MonoBehaviour {public Transform charTrans; //角色坐标public Vector3 currentVelocity; //当前速度public float maxSpeed; //最大速率…...
ThinkLink+EdgeBus 将建大仁科的氧传感器接入到LoRaWAN系统
传统 RS485 传感器,也能快速接入 LoRaWAN 系统很多项目现场,其实已经部署了不少成熟可用的传感器。 问题往往不在于“传感器能不能测”,而在于:怎样把这些传统传感器,快速接入 LoRaWAN 和上层业务系统?以 R…...
基于胸部正位X光片的两阶段对比学习椎体压缩性骨折筛查框架文献速递-多模态医学影像最新进展
2026.4.2本研究提出一种基于胸部正位X光片的双阶段对比学习框架TADC-Net,通过模仿放射科医生的诊断流程,解决了器官遮挡和类间相似性等挑战,实现了椎体压缩性骨折的早期精准筛查,显著提升了诊断性能和临床辅助准确性。Title题目01…...
JAVA语法,接口和抽象类应该如何抉择
01.面向对象设计特性1.1 抽象和接口特性在面向对象编程中,抽象类和接口是两个经常被用到的语法概念,是面向对象四大特性,以及很多设计模式、设计思想、设计原则编程实现的基础。比如,我们可以使用接口来实现面向对象的抽象特性、多…...
郭老师-永远要跟认知比你高的人在一起
永远要跟认知比你高的人在一起 ——从高人身上汲取智慧“你跟什么样的人在一起, 比你做什么样的事情重要得多。” ——巴菲特🌿 真正的成长, 不是埋头苦干, 而是—— 站在巨人的肩膀上看世界。🔭 一、认知高的人&#…...
macOS安全分析利器:OpenClaw控制SecGPT-14B检测恶意文件
macOS安全分析利器:OpenClaw控制SecGPT-14B检测恶意文件 1. 为什么需要本地化的恶意文件检测 作为一名长期使用macOS的安全工程师,我一直在寻找一种既能保护隐私又能高效检测恶意文件的方案。传统的云查杀服务虽然方便,但涉及到上传敏感文件…...
OpenClaw+Phi-3-vision-128k-instruct图文处理实战:本地部署与多模态任务自动化
OpenClawPhi-3-vision-128k-instruct图文处理实战:本地部署与多模态任务自动化 1. 为什么选择这个技术组合? 去年我开始尝试用AI处理日常工作中的图文混合内容时,遇到了一个典型困境:现有的云端多模态服务要么价格昂贵ÿ…...
