k8s服务发现有哪些方式?
在 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: ExternalNameexternalName: 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 查询等多种模式,以适应不同的使用场景:
- 环境变量: 简单但静态,适合启动时即可确定的服务。
- DNS 服务发现: 动态且广泛应用,是 Kubernetes 内部服务通信的主要方式。
- Headless Service: 适用于需要直接访问多个 Pod 的场景。
- ClusterIP: 提供稳定的虚拟 IP,常用于一般内部服务。
- ExternalName: 将内部服务映射到外部域名。
- API Server 查询: 适用于动态服务发现的高级场景。
这些服务发现机制的结合使用,确保了 Kubernetes 集群内外的服务通信能够灵活、高效且可靠。
相关文章:
k8s服务发现有哪些方式?
在 Kubernetes 中,服务发现是指如何让应用程序在集群内互相找到并通信。Kubernetes 提供了多种服务发现的方式,适应不同的使用场景。以下是 Kubernetes 中常见的服务发现方式: 1. 环境变量(Environment Variables) 概…...
【SqlServer】SQL Server Management Studio (SSMS) 下载、安装、配置使用及卸载——保姆级教程
超详细的 SQL Server Management Studio (SSMS) 下载、安装、连接数据库配置及卸载教程 SQL Server Management Studio (SSMS) 是微软提供的图形化管理工具,主要用于连接、管理和开发 SQL Server 数据库。以下是详细的 SSMS 下载、安装、连接数据库以及卸载的完整教…...
[ESP32:Vscode+PlatformIO]添加第三方库 开源库 与Arduino导入第三方库的区别
前言 PlatformIO与Arduino在添加第三方库方面的原理存在显著差异 在PlatformIO中,第三方库的使用是基于项目(工程)的。具体而言,只有当你为一个特定的项目添加了某个第三方库后,该项目才能使用该库。这些第三方库的文…...
音频文件格式——AAC、OGG和FLAC
3.AAC文件格式 3.1 封装格式解析 高级音频编码 (Advanced Audio Coding) 是一种用于有损数字音频压缩的音频编码标准。它被设计为 MP3 格式的继承者,在相同比特率下通常可以获得比 MP3 更高的音质。AAC有两种封装格式: ADIF&am…...
BUU26 [极客大挑战 2019]HardSQL1
输入一些SQL关键词,发现空格,,union,and,by都被过滤了 被过滤,就用like替代 发现登录成功,可以注入 报错注入 注意 1.这里过滤了空格,就用()将内容包裹起来 比如说:…...
多光谱成像技术在华为Mate70系列的应用
华为Mate70系列搭载了光谱技术的产物——红枫原色摄像头,这是一款150万像素的多光谱摄像头。 相较于普通摄像头,它具有以下优势: 色彩还原度高:色彩还原准确度提升约 120%,能捕捉更多光谱信息,使拍摄照片色…...
借助 Cursor 快速实现小程序前端开发
借助 Cursor 快速实现小程序前端开发 在当今快节奏的互联网时代,小程序因其便捷性、高效性以及无需下载安装的特点,成为众多企业和开发者关注的焦点。然而,小程序的开发往往需要耗费大量的时间和精力,尤其是在前端开发阶段。幸运…...
【deepseek】ollama chatbox webui 本地部署deepseek 踩坑记录
部署 1、前往Ollama官网下载跨平台工具 官网直达:https://ollama.com/download 2、挑选适合自己设备的模型版本,获取运行指令 访问模型库:https://ollama.com/library/deepseek-r1 ▌配置建议: • 入门级:1.5B版本&…...
在离线的服务器上部署Python的安装库
在离线服务器上部署 Python 安装库(如 SQLAlchemy、pandas、pyodbc 等),可以使用以下方法: 方法 1:在联网机器上下载依赖,拷贝到离线服务器 适用于:服务器完全无法访问互联网。 步骤 1. 在联网…...
计算机网络笔记再战——理解几个经典的协议2
理解互联网与TCP/IP 下面,我们将会开始理解互联网这个东西,进一步的,我们会理解何为TCP/IP 我们的互联网就是一个巨大的网状结构,需要注意的是——每一个网状的节点之间都是使用一个叫做NOC,Network Operation Center…...
设计高效的测试用例:从需求到验证
在现代软件开发过程中,测试用例的设计一直是质量保证(QA)环节的核心。有效的测试用例不仅能够帮助发现潜在缺陷,提升软件质量,还能降低后期修复成本,提高开发效率。尽管如此,如何从需求出发&…...
git reset 命令
git reset 的作用 git reset 是一个非常强大的命令,用于将当前分支的 HEAD(即当前指向的提交)重置到指定的提交。它还可以根据参数的不同,对工作区(Working Directory)和暂存区(Staging Area&a…...
docker被“遗忘”的那些参数该如何拯救
一、docker容器启动时没有指定端口,如何在不删除容器的情况下配置端口呢 在 Docker 中,如果容器启动时没有指定端口映射,可以通过以下步骤在不删除容器的情况下配置端口: 方法 1: 使用 docker commit 和 docker run 提交容器为新…...
BFS算法——广度优先搜索,探索未知的旅程(下)
文章目录 前言一. N叉树的层序遍历1.1 题目链接:https://leetcode.cn/problems/n-ary-tree-level-order-traversal/description/1.2 题目分析:1.3 思路讲解:1.4 代码实现: 二. 二叉树的锯齿形层序遍历2.1 题目链接:htt…...
Python分享20个Excel自动化脚本
在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式。通过Python,我们可以实现对Excel文件的各种自动化操作,提高工作效率。 本文将分享20个实用的Excel自动化脚本,以帮助新手小白更轻松地掌握这些技能。 1. Excel单…...
pytest+request+yaml+allure 接口自动化测试全解析[手动写的跟AI的对比]
我手动写的:Python3:pytest+request+yaml+allure接口自动化测试_request+pytest+yaml-CSDN博客 AI写的:pytest+request+yaml+allure 接口自动化测试全解析 在当今的软件开发流程中,接口自动化测试扮演着至关重要的角色。它不仅能够提高测试效率,确保接口的稳定性和正确性…...
深入解析 FFmpeg 的 AAC 编解码过程
深入解析 FFmpeg 的 AAC 编解码过程 —— 技术详解与代码实现 AAC(Advanced Audio Coding) 是一种高效的有损音频压缩格式,因其高压缩效率和良好的音质而被广泛应用于流媒体、广播和音频存储等领域。FFmpeg 是一个强大的多媒体处理工具,支持 AAC 的编码和解码。本文将详细…...
嵌入式硬件篇---OpenMV串口通信json字符串
文章目录 前言第一部分:Json字符串通信协议优点缺点 Json优点缺点编码与解码 第二部分:UART串口通信UART常用函数注意 总结 前言 以上就是今天要讲的内容,本文简单介绍了Json字符串、UART串口通信。 第一部分:Json字符串 通信协议 在传统的单片机应用中ÿ…...
Python基于Django的课堂投票系统的设计与实现【附源码】
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
蓝桥杯 Java 之输入输出
一、输入输出方式:Scanner vs BufferedReader Scanner类 简介:Scanner 是 Java 中一个非常方便的用于读取用户输入的类,它可以从多种输入源(如标准输入、文件等)读取基本数据类型和字符串。 1. Scanner的细节与使用…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
