我在 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
您可以在以下位置了解有关创建断路器的更多信息 熔断。