网格网关虚拟服务主机冲突

当 Istio 检测到彼此冲突的虚拟服务资源之间的重叠时,会出现此消息。例如,定义为使用相同主机名并附加到网格网关的多个虚拟服务将生成错误消息。请注意,Istio 支持合并附加到入口网关的虚拟服务。

解决方案

要解决此问题,您可以执行以下操作之一

  • 将冲突的虚拟服务合并到单个资源中。
  • 使附加到网格网关的虚拟服务中的主机名唯一。
  • 通过设置 exportTo 字段将资源范围限定到特定命名空间。

示例

命名空间 team1 中的 productpage 虚拟服务与命名空间 team2 中的 custom 虚拟服务冲突,因为以下两个条件都成立

  • 它们都附加到默认的“网格”网关,因为没有指定自定义网关。
  • 它们都定义了相同的主机 productpage.default.svc.cluster.local
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: productpage
  namespace: team-1
spec:
  hosts:
  - productpage.default.svc.cluster.local
  http:
  - route:
    - destination:
        host: productpage
---
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: custom
  namespace: team-2
spec:
  hosts:
  - productpage.default.svc.cluster.local
  http:
  - route:
    - destination:
        host: productpage.team-2.svc.cluster.local
---

您可以通过将 exportTo 字段设置为 . 来解决此问题,以便每个虚拟服务仅限定在其自己的命名空间范围内

apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: productpage
  namespace: team-1
spec:
  exportTo:
  - "."
  hosts:
  - productpage.default.svc.cluster.local
  http:
  - route:
    - destination:
        host: productpage
---
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: custom
  namespace: team-2
spec:
  exportTo:
  - "."
  hosts:
  - productpage.default.svc.cluster.local
  http:
  - route:
    - destination:
        host: productpage.team-2.svc.cluster.local
---