服务网格:使用Istio根据虚拟服务中的客户端IP路由TCP流量

时间:2020-06-05 03:40:04

标签: kubernetes istio

入口网关位于使用节点端口的AWS ELB(经典)之后,我想基于客户端ip在虚拟服务中路由TCP通信。

当然,ELB的代理协议已启用。

当我使用HTTP时,它可以工作。配置如下。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: app-vservice
  namespace: test
spec:
  hosts:
  - "app-service"
  http:
  - match:
    - headers:
        x-forwarded-for:
          exact: 123.123.123.123
    route:
    - destination:
        host: app-service
        subset: v2
  - route:
    - destination:
        host: app-service
        subset: v1

但是我在官方文档中找不到TCP路由的标头字段。

不可能吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

根据docs yes,在Istio中的TCPRoute中没有字段可以传递标头。同样要回答您的问题,每个标头操作都应使用envoy过滤器进行,因为基于envoy构建的Istio支持此操作,并且还降低了复杂性。

使用Istio文档中所述的envoy和lua过滤器。可以实现。请关注使节docs

在虚拟服务中检出Istio Discussion中的标头。

使用Lua实现相同的功能。还有blog展示了如何在特使上实现过滤器的示例。