Kubernetes 集群内部的速率限制

Kubernetes 集群内部的速率限制

我在 Kubernetes 集群中运行多个服务,并且它们都相互通信。我希望其中一个服务具有速率限制功能。这意味着对于某些呼叫者 ID,它每分钟只能接受 50 个呼叫,并拒绝所有其他呼叫,并返回 429“请求过多”。此限制应该适用于同一集群内的呼叫。

可以使用 k8 对象/功能来完成此操作吗?

答案1

可以在Istio(kubernetes addon),可以通过使用 istiodestinationrule对象创建流量策略连接池来实现。

根据 istio文档

断路器

断路器是 Istio 为创建弹性微服务应用程序提供的另一种有用机制。在断路器中,您可以设置对服务中各个主机的调用限制,例如并发连接数或对此主机的调用失败的次数。一旦达到该限制,断路器就会“跳闸”并停止与该主机的进一步连接。使用断路器模式可以实现快速故障,而不是客户端尝试连接到过载或故障的主机。

由于熔断适用于负载平衡池中的“真实”网格目标,因此您可以在 目标规则reviews ,并将设置应用于服务中的每个单独主机。以下示例将v1 子集的服务工作负载的并发连接数限制 为 100:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
  - name: v1
    labels:
      version: v1
    trafficPolicy:
      connectionPool:
        tcp:
          maxConnections: 100

您可以在以下位置了解有关创建断路器的更多信息 熔断

相关内容