如何在ISTIO中调用网格内的服务?

7

我正在使用安装在Kubernetes之上的服务网格https://istio.io/,并已经按照ISTIO网站提供的示例https://istio.io/docs/examples/bookinfo/进行了安装。

假设我创建了一个名为FOO的服务,并想通过虚拟服务ratings调用该服务。

enter image description here

  • 如何从FOO中调用ratings?在FOO服务中的HTTP客户端中,需要提供哪个地址来调用ratings?我需要为ratings创建虚拟服务吗?ratings不应该在Kubernetes集群外被访问。

  • FOO调用ratings时,请求首先会通过自己的envoy代理还是直接转到ratings的envoy代理?

跟进问题

这里是安装在Kubernetes集群上的所有虚拟服务:

[enter image description here2

集群IP地址为:

enter image description here

问题是,我如何在FOO服务中调用ratings服务?使用Cluster IP地址吗?

3个回答

14
如何在FOO内调用RATINGS?在FOO服务中,http客户端需要提供哪个地址才能调用RATINGS?我是否需要为RATINGS创建虚拟服务?RATINGS不应该在kubernetes集群以外被访问。您仍然可以像没有istio一样调用其他服务。由于该服务只需要在集群内部访问,因此您需要使用clusterIP service来公开该服务。然后,您可以使用Kubernetes DNS按名称调用服务。通常,服务可在http(s)://{namespace}.{service-name}处调用。要调用同一命名空间中的服务,可以将{namespace}从url中省略。虽然创建VirtualService不是必需的,但istio建议这样做:尽管默认的Istio行为方便地将任何来源的流量发送到目标服务的所有版本而无需设置任何规则,但从一开始为每个服务创建具有默认路由的VirtualService通常被认为是Istio的最佳实践。当FOO调用RATINGS时,请求首先通过自己的envoy代理还是直接到达RATINGS envoy代理?

它将通过两个envoy代理进行。这就是istio如何管理您的请求路由并提供诸如跟踪之类的流量洞察。

然而,traffic.sidecar.istio.io/includeOutboundIPRanges注释可以绕过出站envoy代理。


我已经添加了一些关于Kubernetes DNS的更多信息。 - Robbe
但是我想通过VirtualService调用评级服务,那么我必须使用ClusterIP而不是service-name吗? - softshipper
1
不,创建VirtualService时服务名称仍应该有效。您的服务不需要知道istio已部署。 - Robbe
但我想通过“VirtualService”调用“Ratings”服务。怎么做? - softshipper
1
这是由Istio自动管理的。如果为您发送流量的服务注册了VirtualService,则Istio将通过Envoy代理拦截此流量,并根据VirtualService中定义的配置进行路由。 - Robbe
显示剩余3条评论

0

在虚拟服务的网关列表中使用 "mesh" 关键字,服务间通信也将使用这些规则,由边车处理,并利用为特定服务配置的所有额外规则(例如重试)


-1
我建议使用{{link1:Kubernetes DNS}},它附加到一个{{link2:Kubernetes服务}},该服务具有BOO服务的{{link3:selectors}},以便将您的流量重定向到BOO pod。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接