我正在Docker Desktop Kubernetes安装上尝试一个非常简单的Istio设置。
我有两个Spring boot微服务,并且在我的K8s“集群”中部署了这两个服务,没有任何复制。我的YAML文件中只有Service和这两个服务的部署。
我已经安装了istio,我可以看到我的pod中有两个容器。一个是spring boot应用程序,另一个是istio sidecar。
我像这样从服务2到服务1进行rest调用,它工作得很好。
restTemplate.exchange("http://service1:8080/getSomeString", HttpMethod.GET, null, String.class, new Object()).getBody();但是,现在如果我禁用sidecar注入和rededloy me服务,它仍然可以正常工作。基本上,是Kubernetes在解析service1在哪里,并完成rest调用,而不是istio。
如何使用istio进行服务发现?
发布于 2020-02-10 01:21:53
在Istio中,你可以使用traffic management的虚拟服务。通过单个虚拟服务解决多个应用程序服务。例如,如果您的网格使用Kubernetes,您可以配置一个虚拟服务来处理特定名称空间中的所有服务。将单个虚拟服务映射到多个“真实”服务特别有用,这有助于将单个应用程序转换为由不同的微服务构建的组合服务,而不需要服务的使用者适应转换。您的路由规则可以指定“对monolith.com的这些URI的调用转到微服务A”,等等。您可以看到这是如何工作的example。
发布于 2020-02-11 23:35:22
Istio是一个服务网格,因此它不负责服务发现。服务网格将功能添加到服务->服务流量(监视、路由等)。因此,当在Kubernetes集群上运行时,Kubernetes继续负责服务发现,正如您所观察到的。
正如Arghya的回答所述,使用Istio,您可以在此基础上应用VirtualService,这允许您执行“巧妙”的附加功能,例如自定义路由,但这绝不会取代或更改底层Kubertetes服务发现的功能。
在我看来,VirtualService是一个令人困惑的术语,因为它听起来像是在以某种方式取代Kubernete的现有功能。我更喜欢把VirtualService想象成“定制路由”。
顺便说一下,如果你需要一个虚拟服务,你只需要一个。我的意思是,您的集群中可能定义了1000个服务(使用普通的Kubernetes Service结构)。但是,您可能只想将自定义路由规则应用于一个服务--这很好,您只需在Istio中定义1个VirtualService来处理即可。
https://stackoverflow.com/questions/60138453
复制相似问题