【发布时间】:2020-02-09 04:51:43
【问题描述】:
我正在尝试找到一个合适的部署流程,以便从我们当前的基于 Eureka 的 dockerized 微服务环境切换到基于 Istio 的基于 Kubernetes 的微服务环境。理想情况下,我希望能够在旧环境中服务 foo 的实例和新环境中相同服务 foo 的实例之间进行 B/G 和 Canary 式流量权重管理。
据我了解,一种方法是通过实现 Eureka Pilot 平台适配器将旧环境的服务实例包含到单个网格中,并将两个 env 实例加载到单个网格中。但是,这需要将 Envoy 代理添加到旧环境中,我希望我不要那样碰它。
我正在尝试寻找另一种不需要将 Envoy 代理添加到当前环境的方法。我正在阅读有关 ServiceEntry 功能的信息,并试图了解这是否可以提供解决方案。我想我想要的是能够为具有 2 个子集的服务 foo 配置网络路由 - 版本,“旧”和“新”,其中“新”实例是指内部 foo 服务的实例网格和“旧”实例是指在我们当前环境中网格之外的 foo 服务实例。不需要显式定义“旧”实例;我们维护一个特殊的代理服务,其中包含 Eureka 客户端并注册到当前的注册和发现系统,并且可以通过 DNS 引用。可以通过此代理访问所有服务的“旧”实例,只需传递带有上游服务名称的特殊标头即可。但要求是:能够在实例的“新”版本和“旧”版本之间定义不同的流量权重。
因此,网格中的客户端服务 bar 需要与上游服务 foo 进行通信。根据可配置的流量权重,请求应该被路由到服务 foo 实例的“旧”子集或实例的“新”子集。如果请求在内部路由,则应像往常一样遵循 Istio 目标规则。如果请求被路由到“旧”子集,则应添加一个与服务名称相等的特殊标头,并且应将请求路由到基于 Eureka 的代理等待的可配置 DNS,以便执行其自己的“旧”世界中 foo 服务实例之间的负载平衡。
以上可能吗?如果没有,您能否提供替代解决方案?
【问题讨论】:
-
你为什么要使用 istio 是你将部分流量发送到它之外?
-
在我的描述中首先解释了这一点:我正在尝试找到一个合适的部署流程,用于从我们当前的基于 Eureka 的 dockerized 微服务环境切换到基于 Istio 的 Kubernetes-基于微服务的环境。
标签: istio