【问题标题】:How to implement Client IP based routing using Istio features?如何使用 Istio 功能实现基于客户端 IP 的路由?
【发布时间】:2021-09-11 22:28:34
【问题描述】:

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

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

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

【问题讨论】:

  • 你使用什么版本的istio?用的是什么k8s版本?
  • @moonkotte 我使用的是最新版本的 Istio,集群是 V1.19。
  • 关于Client IP 的另一个问题:流量如何从客户端到 istio 网格?是否有任何负载均衡器、入口控制器或其他可以重写client IP 的东西?
  • 是的。在 Istio 入口之前有一个 LoadBalancer,它是流量的入口点。

标签: kubernetes istio istio-gateway


【解决方案1】:

是的,这是可能的。


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

Source IP address of the original client


下一部分是配置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

Source - Github issue comment

还有一个comment关于TCP和addressesServiceEntry中的使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-10
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多