我正在查看Istio的this example,他们正在创建ServiceEntry
和VirtualService
来访问外部服务,但是我不明白为什么他们创建了{ {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
的用途是什么?
答案 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则控制着流向该服务的流量。服务,在这种情况下就是全部。