Istio-负载平衡网格将内部HTTP2流量传输到非标准端口

问题描述

我想使用Istio对每个​​请求的所有可用副本上的我的ClusterIP服务的网状内部HTTP2流量进行负载平衡;第一次迭代旨在在单个名称空间内的两个部署之间工作,但我还不能完全做到这一点。我需要在非标准端口上进行负载平衡,我将标准端口用作控制组。

我能够配置Istio,以使从与服务FQDN的一个长期连接到标准端口80的请求可以正确循环,但是与非标准端口(例如13080)的长期连接将不循环知更鸟,相反,一个单独的Pod会收到所有请求(行为类似于Service中使用的K8s“ iptables random”方法,它仅对每个连接而不对每个请求保持平衡)。

这是我迄今为止最成功的VirtualService定义:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
Metadata:
  name: vs
  namespace: example
spec:
  gateways:
  - mesh
  hosts:
  - "*.example.com"
  http:
  - match:
    - authority:
        regex: "(.*.)?pods.example.com(:80)?"
    route:
    - destination:
        host: pods.example.svc.cluster.local
        port:
          number: 80
  - match:
    - authority:
        regex: "(.*.)?pods.example.com:13080"
    route:
    - destination:
        host: pods.example.svc.cluster.local
        port:
          number: 13080

端口在服务中的定义如下:

  - name: http2
    port: 80
    protocol: TCP
    targetPort: 80
  - name: http2-nonstd
    port: 13080
    protocol: TCP
    targetPort: 13080

使用Istio 1.6.2。我想念什么?

编辑:原始问题在端口13080的VirtualService定义权限匹配中有错字-存在exact而不是regex。但是,什么都没有改变。这支持了Istio出于某种原因会忽略非标准端口的假设。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)