据我了解,Istio
VirtualService
是一种抽象的东西,它试图在实际实现中添加一个接口,就像Kubernetes中的服务或Consul中类似的东西。
当使用 Kubernetes 作为 Istio 的底层平台时,Istio
VirtualService
和 Kubernetes Service
有区别还是一样?
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-service
retries:
attempts: 3
perTryTimeout: 2s
另一个例子
foo-delay-virtualservice
将对 0.1% 的请求应用 0.5 秒的延迟。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
它定义了一组流量路由规则,根据匹配标准应用于 kubernetes 服务或服务子集。这与 kubernetes Ingress 对象类似。对Istio灵活强大的流量管理起到了关键作用。
Kubernetes 服务:它可以是一组逻辑 Pod,并定义为 Pod 之上的抽象,提供单个 DNS 名称或 IP。