Service和Endpoints

在 Kubernetes 中,ServiceEndpoints 是两个非常重要的资源对象,它们共同用于定义和管理集群内部的服务发现和网络通信。下面详细介绍这两个资源对象的功能及其相互关系。

Service

Service 是 Kubernetes 中用于定义抽象逻辑服务的资源对象。它提供了稳定不变的网络标识符,即使后端的实际服务实例发生变更,Service 的 IP 地址和 DNS 名称仍然保持不变。Service 可以用于定义如何访问一组后端 Pod,通常通过标签选择器(label selector)来指定这些 Pod。

Service 的作用
  1. 服务发现:提供一个固定的 IP 地址和 DNS 名称来访问一组后端 Pod。
  2. 负载均衡:自动将流量分发到后端 Pod 上。
  3. 健康检查:支持健康检查机制,确保流量只分发到健康的后端实例。
  4. 端口映射:定义后端 Pod 的端口映射规则。
Service 的类型
  1. ClusterIP:默认类型,创建一个集群内部的虚拟 IP 地址,只能在集群内部访问。
  2. NodePort :为 Service 分配一个集群节点上的端口,使得外部可以通过 <节点IP>:<节点端口> 访问 Service
  3. LoadBalancer :为 Service 创建一个外部负载均衡器,并分配一个外部 IP 地址。
  4. ExternalName :将 Service 映射到一个 DNS 名称,而不是一组后端 Pod。
Service 示例

以下是一个简单的 Service 配置示例,用于定义一个集群内部的服务:

复制代码

Yaml

深色版本

复制代码
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp # 标签选择器
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376
  type: ClusterIP

在这个示例中,my-service 将流量分发到带有 app=MyApp 标签的所有 Pod,并将这些 Pod 的端口 9376 映射到 Service 的端口 80。

Endpoints

Endpoints 是 Kubernetes 中用于定义 Service 后端 Pod 实际 IP 地址和端口的资源对象。当 Pod 的 IP 地址发生变化时,Endpoints 会自动更新,以确保 Service 始终指向正确的后端 Pod。

Endpoints 的作用
  1. 动态更新 :当后端 Pod 的 IP 地址发生变化时,Endpoints 会自动更新。
  2. 负载均衡Endpoints 用于存储 Service 后端 Pod 的实际 IP 地址和端口,以实现负载均衡。
Endpoints 示例

以下是一个简单的 Endpoints 配置示例,用于定义 Service 后端 Pod 的实际 IP 地址和端口:

复制代码

Yaml

深色版本

复制代码
apiVersion: v1
kind: Endpoints
metadata:
  name: my-service-endpoints
subsets:
- addresses:
  - ip: 10.2.3.4
  - ip: 10.2.3.5
  ports:
  - port: 9376

在这个示例中,my-service-endpoints 定义了 Service 后端 Pod 的实际 IP 地址为 10.2.3.410.2.3.5,端口为 9376。

Service 和 Endpoints 的关系

ServiceEndpoints 通常配合使用,以实现服务发现和负载均衡。Service 定义了如何访问一组后端 Pod,而 Endpoints 存储了这些后端 Pod 的实际 IP 地址和端口。

Service 被创建时,Kubernetes 控制器会自动生成相应的 Endpoints 对象,将带有相同标签选择器的 Pod 的 IP 地址和端口添加到 Endpoints 中。

综合示例

以下是一个综合示例,展示了如何定义 Service 并自动创建 Endpoints

复制代码

Yaml

深色版本

复制代码
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376
  type: ClusterIP

当创建 Service 时,Kubernetes 控制器会自动创建相应的 Endpoints 对象,将带有 app=MyApp 标签的 Pod 的 IP 地址和端口添加到 Endpoints 中。

总结

  • Service:用于定义逻辑服务的抽象,提供稳定不变的网络标识符。
  • Endpoints :用于存储 Service 后端 Pod 的实际 IP 地址和端口。

通过 ServiceEndpoints 的配合使用,可以实现服务发现、负载均衡和健康检查等功能,确保集群内部的服务通信的高效和稳定性。

相关推荐
Javatutouhouduan2 小时前
2026Java面试的正确打开方式!
java·高并发·java面试·java面试题·后端开发·java编程·java八股文
chao1898443 小时前
基于 SPEA2 的多目标优化算法 MATLAB 实现
开发语言·算法·matlab
JAVA面经实录9173 小时前
Java初级最终完整版学习路线图
java·spring·eclipse·maven
赏金术士3 小时前
Kotlin 习题集 · 高级篇
android·开发语言·kotlin
Cat_Rocky4 小时前
k8s-持久化存储,粗浅学习
java·学习·kubernetes
楼兰公子4 小时前
buildroot 在编译rust时裁剪平台类型数量的方法
开发语言·后端·rust
知识领航员4 小时前
蘑兔AI音乐深度实测:功能拆解、实测表现与适用场景
java·c语言·c++·人工智能·python·算法·github
吴声子夜歌4 小时前
Go——并发编程
开发语言·后端·golang
释怀°Believe4 小时前
Spring解析
java·后端·spring
ooseabiscuit5 小时前
Laravel4.x:现代PHP框架的奠基之作
java·开发语言·php