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

问题描述 投票:0回答:1

[我正在查看Istio的this example,他们正在创建ServiceEntryVirtualService以访问外部服务,但是我不明白他们为什么还要创建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

仅使用此对象,如果我尝试卷曲edition.cnn.com,我将得到200:

/ # 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

在这种情况下,VirtualService的目的是什么?

istio
1个回答
0
投票

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

[VirtualService也可以绑定到Gateway

在您的情况下,如果缺少VirtualService,则会导致缺少对特使的默认/全局配置修改。这意味着默认配置足以使这种情况正常工作。因此,最可能使用的是Gateway。使用与curl一起请求的相同协议和端口,这些协议和端口均符合ServiceEntry的连接要求。

这在istio documentation中也提到过:

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


您可以使用VirtualService将超时等内容添加到this示例中的连接中。


您可以使用来自istiodocumentationistioctl proxy-config routes <pod-name[.namespace]>的以下命令来检查您的服务的路由

对于bookinfo productpage演示应用程序,它是:

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

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

希望这有助于您了解istio。

© www.soinside.com 2019 - 2024. All rights reserved.