ConflictingMeshGatewayVirtualServiceHosts

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

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

解决方案

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

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

示例

命名空间 team1 的虚拟服务 productpage 与命名空间 team2 的 Virtual Service custom 存在冲突的原因如下:

  • 因为没有指定自定义 Gateway,它们被连接默认的 Gateway。
  • 它们都定义了相同的主机 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 字段为 . 来解决该问题,让每个 Virtual Service 都只限定在自己的命名空间:

  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. ---