k8s服务发现有哪些方式?

news2025/2/6 7:45:57

在 Kubernetes 中,服务发现是指如何让应用程序在集群内互相找到并通信。Kubernetes 提供了多种服务发现的方式,适应不同的使用场景。以下是 Kubernetes 中常见的服务发现方式:

1. 环境变量(Environment Variables)

  • 概述: 当 Pod 被调度到节点上时,Kubernetes 会自动为 Pod 中的每个容器注入与该 Pod 关联的 Service 的环境变量。这些环境变量通常包括服务的 ClusterIP` 和端口号。
  • 实现细节:
    • 例如,假设有一个名为 my-service 的服务,暴露的端口是 80,Kubernetes 会为容器注入以下环境变量:
MY_SERVICE_SERVICE_HOST=10.0.0.1
MY_SERVICE_SERVICE_PORT=80
  • 容器内的应用程序可以使用这些环境变量来连接到服务。
  • 局限性:
    • 这种方法适用于在 Pod 启动时已经存在的服务,但对于在 Pod 运行期间动态创建的服务,环境变量不会自动更新,因此不适合处理服务动态变化的场景。

2. DNS 服务发现

  • 概述: Kubernetes 集群通常包含一个内置的 DNS 服务(如 CoreDNS 或 kube-dns),它为集群中的所有服务提供 DNS 名称解析。通过 DNS 服务发现,Pod 可以使用服务的 DNS 名称来查找并连接到目标服务。
  • 实现细节:
    • 每个 Kubernetes Service 在创建时,都会自动生成一个对应的 DNS 记录,Pod 可以使用 Service 的名称来访问服务。
    • 默认情况下,服务的 DNS 名称格式为:..svc.cluster.local。 例如,一个名为 my-service 的服务在 default 命名空间中,其 DNS 名称为 my-service.default.svc.cluster.local。
  • 优势:
    • 这种方法对服务的动态变化友好,DNS 记录会随着服务的更新而更新。
    • DNS 服务发现支持集群中跨命名空间的服务访问,只需指定命名空间。
  • 常见用法:
    • 应用程序可以直接使用服务的 DNS 名称进行访问,如:
curl http://my-service.default.svc.cluster.local

3. Headless Service 和 DNS A/AAAA 记录

  • 概述: Headless Service 是一种特殊的 Kubernetes Service,不分配 ClusterIP`,仅通过 DNS 解析来发现所有后端 Pod 的 IP 地址。
  • 实现细节:
    • 当 Service 被设置为 Headless(即 spec.clusterIP 为 None)时,Kubernetes 不会分配 ClusterIP,而是直接通过 DNS 返回关联 Pod 的 IP 地址。
    • 这种模式下,DNS 解析返回的结果是一个 IP 地址列表,列出所有符合条件的 Pod,而不是单一的 ClusterIP`。
  • 应用场景:
    • Headless Service` 通常用于需要直接访问各个 Pod 的应用程序,如分布式数据库(如 Cassandra)、消息队列等,应用程序可以获得所有 Pod 的 IP 地址并选择性地连接它们。

4. kube-proxy 实现的虚拟 IP(ClusterIP)

  • 概述: Kubernetes 中的 Service 提供了一个稳定的虚拟 IP(即 ClusterIP),这个 IP 会自动负载均衡到该服务后端的 Pod 上。
  • 实现细节:
    • 当你访问一个 Service 的 ClusterIP 时,kube-proxy 会将请求转发到该服务的某个后端 Pod,kube-proxy 维护了一个 IPVS 或 iptables` 规则来实现这一过程。
    • 应用程序只需访问服务的 ClusterIP 即可,而不需要关心后端的 Pod 如何动态变化。
  • 优势:
    • 稳定的 IP 地址提供了一致的访问入口,适合一般的内部服务通信场景。

5. 外部名称服务(ExternalName)

  • 概述: ExternalName` 服务是一种特殊的服务类型,它通过 DNS CNAME 记录将服务名映射到外部域名。
  • 实现细节:
    • 在创建 ExternalName 服务时,Kubernetes 不会创建实际的负载均衡或代理,而是简单地在 DNS 中创建一个 CNAME 记录指向指定的外部地址。
    • 例如,定义如下的 Service:
yaml
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: ExternalName
  externalName: example.com
  • 此服务的 DNS 名称将解析为 example.com。
  • 应用场景:
    • ExternalName 服务用于将 Kubernetes 集群内的服务请求转发到集群外部的服务或资源。

6. 通过 API Server 进行服务发现

  • 概述: 你还可以通过 Kubernetes API Server 直接查询服务信息,以获取服务的详细配置和端点信息。
  • 实现细节:
    • 使用 kubectl 或直接访问 Kubernetes API,可以查询服务及其关联的 Endpoints 对象。
    • 例如:
kubectl get svc my-service -o yaml
kubectl get endpoints my-service -o yaml
  • 通过这种方式,应用程序或外部系统可以动态发现集群内的服务及其可用的后端 Pod。
  • 应用场景:
    • 适用于需要编程方式动态发现和管理服务的场景,或者需要集成 Kubernetes 集群与其他系统。

总结

Kubernetes 提供了多种服务发现方式,涵盖从环境变量、DNS 服务发现到 API 查询等多种模式,以适应不同的使用场景:

  1. 环境变量: 简单但静态,适合启动时即可确定的服务。
  2. DNS 服务发现: 动态且广泛应用,是 Kubernetes 内部服务通信的主要方式。
  3. Headless Service: 适用于需要直接访问多个 Pod 的场景。
  4. ClusterIP: 提供稳定的虚拟 IP,常用于一般内部服务。
  5. ExternalName: 将内部服务映射到外部域名。
  6. API Server 查询: 适用于动态服务发现的高级场景。

这些服务发现机制的结合使用,确保了 Kubernetes 集群内外的服务通信能够灵活、高效且可靠。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2293672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flash Attention与Attention

原始Attention是: Flash Attention: 伪代码:4d(分别代表Q\K\V\O) Flash Attention2优化了

JAVA进阶之线程

为神马有线程?这玩意儿在干嘛??? 回答这个问题,就先要知道一点点计算机的工作方式。 总所周知,计算机有五部分:输入输出、计算器、存储器、控制器。而在计算机内,CPU、内存、I/O之…

机器学习专业毕设选题推荐合集 人工智能

目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光,一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整理…

C++ 中的 `string` 类型:全面解析与高效操作

C 中的 string 类型:全面解析与高效操作 在 C 中,string 类型是对字符数组的高级封装,它提供了大量内置函数,使得字符串的处理变得更为简便和高效。与 C 风格的字符数组不同,string 类型不仅自动管理内存,…

Java入门进阶

文章目录 1、常用API 1.1、Math1.2、System1.3、Object1.4、Arrays1.5、基本类型包装类 1.5.1、基本类型包装类概述1.5.2、Integer1.5.3、int和String相互转换1.5.4、自动装箱和拆箱 1.6、日期类 1.6.1、Date类1.6.2、SimpleDateFormat类 1.6.2.1、格式化(从Date到…

C#结合html2canvas生成切割图片并导出到PDF

目录 需求 开发运行环境 实现 生成HTML范例片断 HTML元素转BASE64 BASE64转图片 切割长图片 生成PDF文件 小结 需求 html2canvas 是一个 JavaScript 库,它可以把任意一个网页中的元素(包括整个网页)绘制到指定的 canvas 中&#xf…

485网关数据收发测试

目录 1.UDP SERVER数据收发测试 使用产品: || ZQWL-GW1600NM 产品||【智嵌物联】智能网关型串口服务器 1.UDP SERVER数据收发测试 A(TX)连接RX B(RX)连接TX 打开1个网络调试助手,模拟用户的UDP客户端设…

InnoDB和MyISAM的比较、水平切分和垂直切分、主从复制中涉及的三个线程、主从同步的延迟产生和解决

InnoDB和MyISAM的比较 事务支持: InnoDB支持:支持事务 (ACID 属性)。支持 Commit、Rollback 和 Savepoint 操作。适合需要事务处理的应用,例如银行系统。MyISAM:不支持事务。每次操作都是自动提交,不能回滚或中止。适合对事务要求…

JDK9新特性

文章目录 新特性:1.模块化系统使用模块化module-info.java:exports:opens:requires:provides:uses: 2.JShell启动Jshell执行计算定义变量定义方法定义类帮助命令查看定义的变量:/var…

基于Ubuntu2404搭建Zabbix7.2

Zabbix 搭建zabbix zabbix7.2已推出:官网 增加的新功能如下: 1.使用新的热门商品小部件全面概览指标 数据概览小部件已转换为热门项目小部件使用项目模式可以实现细粒度的项目选择利用条形图、指标和迷你图来可视化您的数据定义价值阈值以动态地可视化…

Math Reference Notes: 符号函数

1. 符号函数的定义 符号函数(Sign Function) sgn ( x ) \text{sgn}(x) sgn(x) 是一个将实数 ( x ) 映射为其 符号值(即正数、负数或零)的函数。 它的定义如下: sgn ( x ) { 1 如果 x > 0 0 如果 x 0 − 1 如…

【数据结构】链表应用-链表重新排序

重新排序 反转链表预期实现思路解题过程code力扣代码核心代码完整代码 总结 删除链表中间节点代码解惑 链表重新排序题目描述解题思路解题过程复杂度代码力扣代码完整代码 反转链表 预期实现 思路 你选用何种方法解题? 我选用了迭代法来反转链表。这是一种经典且高…

学习threejs,pvr格式图片文件贴图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️PVR贴图1.2 ☘️THREE.Mesh…

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题2)-网络部分解析-附详细代码

目录 附录1:拓扑图​编辑 附录2:地址规划表 1.SW1 2.SW2 3.SW3 4.SW4 5.SW5 6.SW6 7.SW7 8.R1 9.R2 10.R3 11.AC1 12.AC2 13.EG1 14.EG2 15.AP2 16.AP3 附录1:拓扑图 附录2:地址规划表

C++,STL,【目录篇】

文章目录 一、简介二、内容提纲第一部分:STL 概述第二部分:STL 容器第三部分:STL 迭代器第四部分:STL 算法第五部分:STL 函数对象第六部分:STL 高级主题第七部分:STL 实战应用 三、写作风格四、…

【AI论文】直接对齐算法之间的差异模糊不清

摘要:直接对齐算法(DAAs)通过在对齐人类反馈的强化学习(RLHF)中用直接策略优化替代强化学习(RL)和奖励建模(RM),简化了语言模型对齐过程。DAAs可以根据其排序…

(9)gdb 笔记(2):查看断点 info b,删除断点 delete 3,回溯 bt,

(11) 查看断点 info b: # info b举例: (12)删除断点 delete 2 或者删除所有断点: # 1. 删除指定的断点 delete 3 # 2. 删除所有断点 delete 回车,之后输入 y 确认删除所有断点 举…

中间件的概念及基本使用

什么是中间件 中间件是ASP.NET Core的核心组件,MVC框架、响应缓存、身份验证、CORS、Swagger等都是内置中间件。 广义上来讲:Tomcat、WebLogic、Redis、IIS;狭义上来讲,ASP.NET Core中的中间件指ASP.NET Core中的一个组件。中间件…

S4 HANA手工记账Tax Payable – FB41

本文主要介绍在S4 HANA OP中手工记账Tax Payable – FB41。具体请参照如下内容: 手工记账Tax Payable – FB41 该事务代码用于手工处理税码统驭科目的记账,一般税码科目需要设置为只能自动记账,因此无法手工对税码统驭科目记账,但…

Java 大视界 -- Java 大数据在智慧文旅中的应用与体验优化(74)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…