k8s service的工作机制

一.基本概念

  • Service:一个稳定的网络端点,暴露一组 Pod 的服务。
  • Selector:用于选择 Pod 的标签选择器。
  • ClusterIP:一个虚拟 IP 地址,供集群内部访问。
  • Endpoints:表示与 Service 关联的 Pod 的 IP 地址和端口。
  • EndpointSlice:一种改进的端点表示方式,用于提高性能和可扩展性。

二.工作机制

1.创建service,k8s收到请求,写到etcd

2.service controller监听apiserver发现有service创建出,分配clusterIp给service,告诉apiserver更新至etcd

3.endpoints controller会根据svc的标签选择器找到匹配的pod,写到endpoints或endpointSlice

a)如果使用的是 Endpoints 资源,则所有匹配的 Pod 信息会存储在一个 Endpoints 资源中。

b)如果使用的是 EndpointSlice 资源,则匹配的 Pod 信息会分片存储在多个 EndpointSlice 资源中,以提高性能和可扩展性

4.通过kube-proxy代理,将流量转发到对应的pod,kube-proxy 使用 iptables 或 ipvs 来设置网络规则,这些规则会捕获发往 Service 的流量,并将其转发到对应的 Pod

  • iptables 模式kube-proxy 使用 iptables 规则直接在内核空间进行流量转发,避免了用户空间的性能瓶颈。
  • IPVS 模式kube-proxy 使用 Linux 内核的 IPVS(IP Virtual Server)模块进行流量转发,提供更高的性能和扩展性。

 三.流量走向

当客户端(可以是集群内部的 Pod 或外部的用户)访问 Service 时,流量的走向如下:

  1. 客户端发起请求

    • 客户端向 Service 的 ClusterIP 和端口发起请求。
  2. kube-proxy 拦截流量

    • 由于 Service 的 ClusterIP 是一个虚拟 IP 地址,不绑定到实际的网络接口,kube-proxy 在每个节点上设置的 iptables/ipvs 规则会捕获发往 ClusterIP 的流量。
  3. kube-proxy 选择后端 Pod

    • kube-proxy 根据 Endpoints 资源中的信息,选择一个匹配的 Pod 作为请求的目标。
    • 选择算法可以是轮询、随机等,具体取决于 kube-proxy 的配置。
  4. 流量转发到 Pod

    • kube-proxy 将流量转发到选定的 Pod 的 IP 地址和端口。
    • 如果目标 Pod 在同一个节点上,流量直接通过本地网络转发。
    • 如果目标 Pod 在不同的节点上,流量通过集群网络(由底层网络插件如 Flannel、Calico 等提供)转发。
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值