在Kubernetes中的多个服务实例之间同步HTTP请求

在Kubernetes中的多个服务实例之间同步HTTP请求,kubernetes,microservices,Kubernetes,Microservices,我们有一个具有多个副本的服务,它可以在没有事务和阻塞方法的情况下使用存储。因此,我们需要通过某种“切分”键在多个实例之间同步并发请求。现在,我们在Kubernetes环境中将此服务作为复制集托管 你难道不知道任何简单的开箱即用的方法如何做到这一点,而不是从头开始实现它吗 以下是我们关于如何做到这一点的一些想法: 将服务部署为StatefulSet,并实现一些代理API,通过从HTTP请求中切分密钥将流量路由到此StatefulSet中的特定pod。在这种情况下,所有应该同步的请求都将由一个实例处

我们有一个具有多个副本的服务,它可以在没有事务和阻塞方法的情况下使用存储。因此,我们需要通过某种“切分”键在多个实例之间同步并发请求。现在,我们在Kubernetes环境中将此服务作为复制集托管

你难道不知道任何简单的开箱即用的方法如何做到这一点,而不是从头开始实现它吗

以下是我们关于如何做到这一点的一些想法:

  • 将服务部署为StatefulSet,并实现一些代理API,通过从HTTP请求中切分密钥将流量路由到此StatefulSet中的特定pod。在这种情况下,所有应该同步的请求都将由一个实例处理,处理这种情况不会有问题

  • 将服务部署为状态集,并在同一服务中实现一些自定义逻辑,以将流量重新路由到特定实例(或在此实例上的进程)。据我所知,抽象实现是不可能的,它只能在Kubernetes环境中工作

  • 以某种方式在集群外部公开每个pod IP,并在客户端实现路由逻辑

  • 只需通过Redis等第三方服务实现实例之间的同步

  • 我想尝试将流量路由到特定的播客。如果你知道如何处理这个案件的标准方法,我将不胜感激


    提前非常感谢

    另一种方法是将消息队列(如Kafka和RabbitMq)放在您的服务前面。 然后,您的POD将订阅MQ主题/流。pod将决定是否处理该消息

    另外,尝试查看服务网格,如或。
    他们可能会为您的用例提供OOTB解决方案,尽管我找不到。

    请记住,网络策略不是流量路由

    POD是无状态的,彼此无法区分

    我建议您使用Istio。它有一个特殊的组成部分,负责或派遣特使。它是一个在C++中开发的高性能代理,用于服务网格中所有服务的所有入站和出站业务。 有用文章:

    Istio文档:

    有用的Istio解释

    但您应该能够为每个客户组创建一个部署,并为每个部署创建一个服务。应能够告知Ingress nginx根据与特定客户群服务相关的任何属性映射传入请求

    另一个解决方案是使用

    Kube路由器可以作为代理或Pod(通过守护程序)在每个节点上运行,并利用标准的Linux技术iptablesipvs/lvsipsetiproute2.

    Kube路由器使用Linux内置的IPVS/LVS技术来提供L4负载平衡。每个ClusterIP、NodePort和LoadBalancer Kubernetes服务类型都配置为IPVS虚拟服务。每个服务端点都配置为虚拟服务的真实服务器。标准ipvsadm工具可用于验证配置和监视活动连接

    工作原理: