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 记录。
(以上摘自文心一言)
浙公网安备 33010602011771号