在此示例中,“ VirtualService”的目的是什么?

时间:2020-01-10 10:15:26

标签: istio

我正在查看Istio的this example,他们正在创建ServiceEntryVirtualService来访问外部服务,但是我不明白为什么他们创建了{ {1}}。

因此,这是VirtualService

ServiceEntry

仅使用此对象,如果我尝试卷曲apiVersion: networking.istio.io/v1alpha3 kind: ServiceEntry metadata: name: edition-cnn-com spec: hosts: - edition.cnn.com ports: - number: 80 name: http-port protocol: HTTP - number: 443 name: https-port protocol: HTTPS resolution: DNS ,我将得到200:

edition.cnn.com

虽然我无法访问其他服务:

/ # curl edition.cnn.com -IL 2>/dev/null | grep HTTP
HTTP/1.1 301 Moved Permanently
HTTP/1.1 200 OK

但是在示例中,他们也创建了这个/ # curl google.com -IL HTTP/1.1 502 Bad Gateway location: http://google.com/ date: Fri, 10 Jan 2020 10:12:45 GMT server: envoy transfer-encoding: chunked

VirtualService

在这种情况下,apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: edition-cnn-com spec: hosts: - edition.cnn.com tls: - match: - port: 443 sni_hosts: - edition.cnn.com route: - destination: host: edition.cnn.com port: number: 443 weight: 100 的用途是什么?

2 个答案:

答案 0 :(得分:1)

VirtualService对象基本上是一个抽象的试验资源,它可以修改特使过滤器。 因此,创建VirtualService是对特使的一种修改方式,其主要目的就像回答以下问题:“对于名称,我如何路由到后端?”

VirtualService也可以绑定到Gateway

在您的情况下,缺少VirtualService会导致缺少从默认/全局配置修改特使。这意味着默认配置足以使这种情况正常工作。 因此,使用的Gateway很可能是默认值。使用您要求curl时使用的相同协议和端口,这些协议和端口都符合ServiceEntry的连接要求。

istio documentation中也提到了这一点:

Virtual services, 连同destination rules, 是Istio流量路由功能的关键构建块。 虚拟服务可让您配置如何将请求路由到 在基础上构建的Istio服务网格中的服务 Istio和您的平台提供的连接和发现。每 虚拟服务由一组经过评估的路由规则组成 依次让Istio将每个给定请求与虚拟 服务到网格内的特定实际目标。你的网可以 需要多个虚拟服务,也可以不需要多个虚拟服务。


您可以使用VirtualService向连接中添加超时,例如this示例。


您可以使用来自istio documentation istioctl proxy-config routes <pod-name[.namespace]>

的以下命令来检查您的服务的路由

对于bookinfo产品页面演示应用程序,它是:

istioctl pc routes $(kubectl get pod -l app=productpage -o jsonpath='{.items[0].metadata.name}') --name 9080 -o json

这样,您可以检查没有VirtualService对象的路线的外观。

希望这有助于您了解istio。

答案 1 :(得分:1)

VirtualService实际上并没有做任何事情,而是docs say

从一开始就为每个服务创建具有默认路由的VirtualService,通常被认为是Istio的最佳做法


ServiceEntry 将CNN网站添加为Istio内部服务注册表的条目,因此网格中自动发现的服务可以路由到这些手动指定的服务。

通常,它从一开始就用于监视外部服务和其他Istio功能,而 VirtualService 将允许请求的正确路由(基本上是流量管理)。

文档中的

This page提供了有关使用ServiceEntries和VirtualServices的更多背景信息,但是基本上ServiceEntry确保您的网状网了解该服务并可以对其进行监视,而VirtualService则控制着流向该服务的流量。服务,在这种情况下就是全部。