3

我正在尝试使用 Istio 功能实现基于客户端 IP 的路由。

我有两个版本的应用程序V1(Stable)V2(Canary)。如果客户端 IP 来自特定的 CIDR 块(主要是我的组织的 CIDR),我想将流量路由到应用程序的金丝雀版本(V2),并且所有其他流量应该路由到稳定版本(V1),即实时流量。

有没有办法使用 Istio 来实现这个功能?

4

1 回答 1

0

是的,这是可能的。


由于您load balancer在 kubernetes 集群前面有一个,因此要解决的第一个问题是保留 client IP,因为由于 NATload balancer会打开另一个到 kubernetes 集群内部的会话并且source IP丢失了。它必须被保存。这可以根据使用的load balancer类型以不同的方式完成。请参见:

原始客户端的源IP地址


下一部分是配置一个virtual service基于client IP. 它针对 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

来源 - Github 问题评论

中也有关于 TCP 和用法的评论addressesServiceEntry

于 2021-07-06T14:50:26.817 回答