ConflictingMeshGatewayVirtualServiceHosts

消息名称ConflictingMeshGatewayVirtualServiceHosts
消息代码IST0109
描述Conflicting hosts on VirtualServices associated with mesh gateway
等级Error

当 Istio 检测到因 VirtualService 资源重复而导致冲突时,会出现此消息。比如,多个 VirtualService 使用相同的主机名且连接网格 Gateway 时, 会出现一条错误消息。需要注意的是,Istio 支持合并挂接到入口网关的 VirtualService。

解决方案

解决该问题,有如下几个方法:

  • 将冲突的 VirtualService 合并为一个
  • 连接 Gateway 的 VirtualService 使用唯一的主机名
  • 通过设置 exportTo 字段,将资源范围限定到指定的命名空间。

示例

命名空间 team1 的 VirtualService productpage 与命名空间 team2 的 VirtualService custom 存在冲突的原因如下:

  • 因为自定义 Gateway 未被指定,所以 VirtualService 挂接到了默认的 “mesh” Gateway。
  • VirtualService 都定义了相同的主机 productpage.default.svc.cluster.local
  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: VirtualService
  3. metadata:
  4. name: productpage
  5. namespace: team-1
  6. spec:
  7. hosts:
  8. - productpage.default.svc.cluster.local
  9. http:
  10. - route:
  11. - destination:
  12. host: productpage
  13. ---
  14. apiVersion: networking.istio.io/v1alpha3
  15. kind: VirtualService
  16. metadata:
  17. name: custom
  18. namespace: team-2
  19. spec:
  20. hosts:
  21. - productpage.default.svc.cluster.local
  22. http:
  23. - route:
  24. - destination:
  25. host: productpage.team-2.svc.cluster.local
  26. ---

您可以通过设置 exportTo 字段为 . 来解决此问题,让每个 VirtualService 都只限定在自己的命名空间:

  1. apiVersion: networking.istio.io/v1alpha3
  2. kind: VirtualService
  3. metadata:
  4. name: productpage
  5. namespace: team-1
  6. spec:
  7. exportTo:
  8. - "."
  9. hosts:
  10. - productpage.default.svc.cluster.local
  11. http:
  12. - route:
  13. - destination:
  14. host: productpage
  15. ---
  16. apiVersion: networking.istio.io/v1alpha3
  17. kind: VirtualService
  18. metadata:
  19. name: custom
  20. namespace: team-2
  21. spec:
  22. exportTo:
  23. - "."
  24. hosts:
  25. - productpage.default.svc.cluster.local
  26. http:
  27. - route:
  28. - destination:
  29. host: productpage.team-2.svc.cluster.local
  30. ---