我正在尝试使用 Istio 功能实现基于客户端 IP 的路由。
我有两个版本的应用程序V1(Stable)和V2(Canary)。如果客户端 IP 来自特定的 CIDR 块(主要是我的组织的 CIDR),我想将流量路由到应用程序的金丝雀版本(V2),并且所有其他流量应该路由到稳定版本(V1),即实时流量。
有没有办法使用 Istio 来实现这个功能?
我正在尝试使用 Istio 功能实现基于客户端 IP 的路由。
我有两个版本的应用程序V1(Stable)和V2(Canary)。如果客户端 IP 来自特定的 CIDR 块(主要是我的组织的 CIDR),我想将流量路由到应用程序的金丝雀版本(V2),并且所有其他流量应该路由到稳定版本(V1),即实时流量。
有没有办法使用 Istio 来实现这个功能?
是的,这是可能的。
由于您load balancer
在 kubernetes 集群前面有一个,因此要解决的第一个问题是保留 client IP
,因为由于 NATload balancer
会打开另一个到 kubernetes 集群内部的会话并且source IP
丢失了。它必须被保存。这可以根据使用的load balancer
类型以不同的方式完成。请参见:
下一部分是配置一个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
中也有关于 TCP 和用法的评论。addresses
ServiceEntry