Tag*_*Poe 5 haproxy kubernetes envoyproxy
我正在寻找具有基于 URL 的亲和性的服务代理(或负载平衡器)。
这是用于在集群内部的 Kubernetes 中使用的:我正在寻找一个“内部”负载均衡器,我不需要将服务暴露在外面。
默认情况下,Kubernetes 中的 Service 使用“循环”算法。
我想要基于 HTTP URL 的一部分的一些亲和性:第一个请求将转到随机 pod,使用相同 URL 的后续请求将(最好)转到同一个 pod。
我已经阅读了一些关于基于 sourceIP 的亲和性的文档,这是否基于 URL 存在?
我已经快速阅读了 Envoy,也许使用“Ring hash”负载平衡算法就可以了,但我不知道是否可以基于 URL 进行散列。
也许使用 kube-proxy 的“ipvs”代理模式(https://kubernetes.io/docs/concepts/services-networking/service/#proxy-mode-ipvs)可以,但我只看到“目的地散列”和“源哈希”作为负载平衡算法,我也不知道如何配置它。
正如您已经提到的,IPVS代理算法定义源 IP 地址和目标 IP 地址,以便生成用于负载平衡的唯一哈希密钥。然而,它在 L4 传输层运行,拦截 TCP 或 UDP 服务的网络流量。因此,与 HTTP 请求交互并根据 URL 路径做出路由决策可能会很困难。
Envoy代理通过HTTP 标头值表示一致的哈希,在HTTP 路由器过滤器内指定以及环哈希负载平衡策略。因此,您可以在Hash策略中指定合适的标头名称,以获取负载均衡的哈希键。
hash_policy:
header:
header_name: "x-url"
Run Code Online (Sandbox Code Playgroud)
Alternatively, you can consider to use Istio as an intermediate proxy which uses extended version of Envoy. Kubernetes services are involved into the service mesh by deploying a special sidecar proxy throughout your environment that intercepts all network communication between microservices. Istio can be also used for Hash consistent load balancing with session affinity based on HTTP headers via DestinationRule resource.
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: example
spec:
host: my-service.default.svc.cluster.local
trafficPolicy:
loadBalancer:
consistentHash:
httpHeaderName: x-url
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
884 次 |
最近记录: |