问题描述
我想使用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 (将#修改为@)