Kubernetes集群内的Canary流量管理

Kubernetes集群内的Canary流量管理,kubernetes,istio,Kubernetes,Istio,我正在尝试为尚未成为Istio服务网格一部分但仍在同一k8s集群中的应用程序实现金丝雀风格的流量管理。例如: mesh命名空间非mesh中的PodA调用命名空间mesh中的服务B,后者绑定到服务网格内的Pod。理想的状态是,通过相关的VirtualServiceobject中描述的规则分发到这些pod的流量 Istio的本地设施是否可以实现这一点?在Istio中,虚拟服务对象在服务网格侧车中插入路由规则。这些路由规则在客户端进行评估(在您的情况下,如果存在侧车,则将是与服务A关联的侧车)。因此,

我正在尝试为尚未成为Istio服务网格一部分但仍在同一k8s集群中的应用程序实现金丝雀风格的流量管理。例如:

mesh
命名空间
非mesh
中的PodA调用命名空间
mesh
中的
服务
B,后者绑定到服务网格内的Pod。理想的状态是,通过相关的
VirtualService
object中描述的规则分发到这些pod的流量


Istio的本地设施是否可以实现这一点?

在Istio中,虚拟服务对象在服务网格侧车中插入路由规则。这些路由规则在客户端进行评估(在您的情况下,如果存在侧车,则将是与
服务A关联的侧车)。因此,您无法在
服务A
服务B
之间执行流量管理(因为没有客户端侧车)。如果您不想为整个
非mesh
命名空间启用mesh,解决此问题的一种可能方法是只为
服务A
插入侧车。这将在侧车中创建所有必要的规则,然后您可以使用流量权重修改服务A和服务B之间的请求

感谢您的快速响应!我有点困惑。
网关
对象不应该像为外部客户端提供流量管理功能一样,为内部集群通信提供流量管理功能吗?换句话说:为什么在
Gateway
对象中指定内部主机名,如
service-b.mesh.svc.cluster.local
,并创建匹配的
VirtualService
不能提供所需的流量管理功能?网关对象通过在一些入口/出口吊舱中创建必要的路由来工作(您可以使用Gateway对象中的选择器选择目标。它适用于外部流量,因为在此设置中,您的边缘侧车与客户端侧车类似,并在那里评估规则)。在您的情况下,它将不起作用,因为您正在直接调用服务B。如果要使用此方法,您将需要创建一些内部入口吊舱,并将其配置为侦听服务B请求(网关用于在边缘代理上创建侦听器)。在此之后,您可以点击入口端点并使用服务B作为主机头,这将把流量路由到服务B并启用所有流量管理功能,但这将添加另一个额外的跃点。虽然这会起作用,但我不建议使用此设置,因为这将涉及管理DNS的另一个问题(在服务A中,您需要域服务-b.mesh.svc.cluster.local来解析进入服务,而不是服务b的实际IP,可能有一个解决方案来配置它,但这将使整个情况变得复杂)谢谢你的有用评论!过了一段时间,我想到了一个主意,我可能会利用Istio入口网关功能来实现“内部入口”用例。但是,我可能需要使用一些DNS设置来解析从非网格吊舱到入口网关的DNS查询
服务