马哥云原生微服务治理大厂冲刺班名师亲授
服务注册和发现
基于SpringCloud实现
以 Spring Cloud 的 Eureka 为例,服务提供者会把自己的服务名和 IP注册到 Eureka。服务消费者调用服务提供者时,先通过服务名在 Eureka 找到对应的服务提供者的一组访问 IP,利用 Ribbon 的负载均衡策略,选择一个合适的 IP,去访问对应的微服务,属于客户端实现的负载均衡。

基于K8S实现
K8S 则是定义了 service 的概念,是一组 pod 的集合,在创建 service 时,会根据标签选择器(label selector)选择合适的 pod,并记录为 endpoint 对象,endpoint 中记录的是 service 和 pod 之间的关系。
每个 Node 节点运行了kube-proxy 来监控 pod,当 pod 的 IP 地址发生变化时,kube-proxy 会去更新对应的 endpoint,此外 service 的服务名字也会被注册到 coreDNS 服务,这样服务之间通过 service 的名字就可以互相访问了。
当服务消费者(pod A)访问服务提供者(pod B)的时候,根据kube-proxy 不同模式下的负载均衡策略(比如 iptables),来决定将请求转发到哪个 pod
