Istio 的“DestinationRule”与 Kubernetes 的“Service”之间的区别?

The difference between Istio's `DestinationRule` vs Kubernetes `Service`?

刚看了istio 1.0.0的文档,特别是概念。我想了解一件事,尤其是 DestinationRule 的存在。所以,在使用 Istio 之前,暴露 pods 的唯一方法是通过 Kubernetes 的 Service 对象。现在,使用 Istio,有 DestinationRuleVirtualService

我知道在 Kubernetes 的服务中,我们可以定义 service 路由流量的 pod 标签。在 istio 中,我们还可以通过使用 DestionationRulespec.subsets.label 字段来做到这一点。如果我们在同一个命名空间中有 ServiceDestinationRule 对象会怎样?是否相互冲突?

它们相得益彰。您仍然需要定义一个 Kubernetes 服务,但 Istio DestinationRules 将允许您通过标签在该服务中优化 "subsets",然后在 VirtualService 对象中使用的子集之间智能地路由流量.您仍然可以将 Kubernetes 服务视为全局入口点,但 Istio 将通过让您声明可能指向不同部署的 "versions" 来进一步路由。

请参阅 istio 文档 (https://istio.io/docs/reference/config/networking/virtual-service/) VirtualService 定义如何与 DestinationRules 中声明的子集相关。

您可以在子集中看到的标签必须与您 deployments/pods 上设置的标签相匹配。