k8s中的服务发现机制是如何实现的
在 Kubernetes (k8s) 中,服务发现机制主要通过以下方式实现:
1. DNS 服务发现
Kubernetes 内置了 DNS 服务(如 CoreDNS),为每个 Service 和 Pod 分配 DNS 名称,便于通过域名访问服务。
- Service DNS: 每个 Service 会获得一个 DNS 名称,格式为
<service-name>.<namespace>.svc.cluster.local
。例如,my-service.default.svc.cluster.local
。 - Pod DNS: 如果启用了
Pod DNS
,每个 Pod 也会有 DNS 记录,格式为<pod-ip>.<namespace>.pod.cluster.local
。
2. 环境变量
当 Pod 启动时,Kubernetes 会将集群中所有 Service 的信息注入到 Pod 的环境变量中,格式为 <SERVICE_NAME>_SERVICE_HOST
和 <SERVICE_NAME>_SERVICE_PORT
。例如,MY_SERVICE_SERVICE_HOST
和 MY_SERVICE_SERVICE_PORT
。
3. Service 资源
Service 是 Kubernetes 中的核心抽象,用于定义一组 Pod 的访问策略。Service 通过 Label Selector 选择 Pod,并提供稳定的 IP 和端口。
- ClusterIP: 默认类型,提供集群内部的虚拟 IP,只能在集群内访问。
- NodePort: 在每个节点上开放一个端口,外部可通过节点 IP 和端口访问。
- LoadBalancer: 通过云提供商的负载均衡器暴露服务。
- ExternalName: 将服务映射到外部 DNS 名称。
4. Endpoint 资源
Service 通过 Endpoint 资源与 Pod 关联。Endpoint 记录了 Service 对应 Pod 的 IP 和端口,Service 的流量会转发到这些 Endpoint。
5. Ingress 资源
Ingress 用于管理外部访问,通常与 Ingress Controller 配合,提供 HTTP/HTTPS 路由、负载均衡和 SSL 终止等功能。
6. Headless Service
对于无头服务(ClusterIP: None
),Kubernetes 不会分配 ClusterIP,而是直接返回 Pod 的 IP 地址,适用于需要直接访问 Pod 的场景。
7. Service Mesh
Istio、Linkerd 等服务网格提供了更高级的服务发现和流量管理功能,如负载均衡、熔断、监控等。
总结
Kubernetes 的服务发现机制通过 DNS、环境变量、Service 和 Endpoint 等资源实现,确保服务在动态环境中能够被可靠发现和访问。
本文来自博客园,作者:dashery,转载请注明原文链接:https://www.cnblogs.com/ydswin/p/18100582
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略