ConflictingMeshGatewayVirtualServiceHosts

当 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
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: productpage
  namespace: team-1
spec:
  hosts:
  - productpage.default.svc.cluster.local
  http:
  - route:
    - destination:
        host: productpage
---
apiVersion: networking.istio.io/v1alpha3
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 字段为 . 来解决该问题,让每个 Virtual Service 都只限定在自己的命名空间:

apiVersion: networking.istio.io/v1alpha3
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/v1alpha3
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
---