据我了解,Istio VirtualService是一种抽象的东西,它试图向实际实现中添加接口,例如Kubernetes中的服务或Consul中的类似内容。
我的问题是:
当使用Kubernetes作为Istio的基础平台时,Istio VirtualService和Kubernetes Service之间有什么区别吗?还是一样?
答案 0 :(得分:3)
作为每个Istio的扩展,Istio的VirtualServices提供了一些附加功能,例如外部流量路由/管理(到外部通信的Pod,HTTPS外部通信,路由,URL重写...)。
有关此文档的更多信息,请参阅:https://istio.io/docs/reference/config/istio.networking.v1alpha3/#VirtualService
它们都很有用,因为您需要“经典”服务来管理入口流量或服务到服务的通信。
史蒂夫。
答案 1 :(得分:3)
虚拟服务:
它基于匹配标准定义了一组流量路由规则,以应用于kubernetes服务或服务子集。这类似于kubernetes Ingress对象。它对Istio的流量管理的灵活和强大起着关键作用。
Kubernetes服务:
它可以是Pod的逻辑集合,并且可以定义为Pod顶部的抽象,它提供单个DNS名称或IP。
答案 2 :(得分:3)
Kubernetes service
管理 Pod 的网络。它指定您的 Pod 是在内部公开 (ClusterIP
)、外部公开(NodePort
或 LoadBalancer
)还是作为其他 DNS 条目的 CNAME (externalName
)。
例如,此 foo-service
将公开带有标签 app: foo
的 Pod。发送到端口 30007
上的节点的任何请求都将转发到端口 80
上的 Pod。
apiVersion: v1
kind: Service
metadata:
name: foo-service
spec:
type: NodePort
selector:
app: foo
ports:
- port: 80
targetPort: 80
nodePort: 30007
Istio virtualservice
比 Kuberenetes service
高一级。它可用于将流量路由、故障注入、重试和许多其他配置应用于 services
。
例如,对于 foo-retry-virtualservice
的失败请求,此 foo
将重试 3 次,每次超时 2 秒。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: foo-retry-virtualservice
spec:
hosts:
- foo
http:
- route:
- destination:
host: foo
retries:
attempts: 3
perTryTimeout: 2s
此 foo-delay-virtualservice
的另一个示例将对 foo
的 0.1% 的请求应用 0.5 秒的延迟。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: foo-delay-virtualservice
spec:
hosts:
- foo
http:
- fault:
delay:
percentage:
value: 0.1
fixedDelay: 5s
route:
- destination:
host: foo
https://kubernetes.io/docs/concepts/services-networking/service/ https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/ https://istio.io/latest/docs/reference/config/networking/virtual-service/ https://istio.io/latest/docs/concepts/traffic-management/#virtual-services