6.2.5 服务发现
定义:
Kubernetes 服务发现是指在 Kubernetes 集群中,一个服务(Service)能够找到并访问其他服务或 Pod 的过程。
一、服务发现的机制
Kubernetes 服务发现的核心机制依赖于以下几个组件:
- API Server:提供 RESTful API,集群中所有对象资源的增删改查和监听操作都通过 API Server 处理,并存储在 etcd 中。
- etcd:分布式键值存储系统,用于保存集群状态数据,包括 Pod、Service 等对象信息。
- kube-proxy:在每个 Node 节点上实现 Pod 网络代理,维护网络规则和四层负载均衡工作。
- kube-dns/CoreDNS:提供集群内部的 DNS 服务,将 Service 名称解析为对应的 IP 地址。
二、服务发现的方法:
1、环境变量
- 当 Pod 运行时,kubelet 会为每个活跃的 Service 添加一组环境变量,其中包含服务的 IP 和端口信息。
- 环境变量的命名规则为
{SVCNAME}_SERVICE_HOST
和{SVCNAME}_SERVICE_PORT
,其中SVCNAME
是 Service 的名称(大写,横线转为下划线)。 - 这种方法简单、易用,但存在局限性,如只能注入与 Pod 在同一命名空间且事先存在的 Service 的信息
2、DNS
- Kubernetes 使用 kube-dns 或 CoreDNS 提供基于 DNS 的服务发现。
- 每个 Service 在创建时都会被分配一个 DNS 名称,格式为
<service>.<ns>.svc.<zone>
,其中service
是 Service 的名称,ns
是命名空间,zone
是集群的域名(默认为cluster.local.
)。 - 客户端可以通过 Service 的 DNS 名称进行服务发现,DNS 服务器会将其解析为对应的 IP 地址。
- DNS 方法更灵活,支持跨命名空间的服务发现,且随着 Service 的变化自动更新 DNS 记录。
(以上摘自文心一言)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端