競合するメッシュゲートウェイVirtualServiceホスト

このメッセージは、Istio が競合する複数の Virtual Service リソース間の重複を検出した場合に発生します。たとえば、同じホスト名を使用し、メッシュゲートウェイに接続するように定義された複数の Virtual Service は、エラーメッセージを生成します。Istio は、イングレスゲートウェイに接続された Virtual Service のマージをサポートしていることに注意してください。

解決策

この問題を解決するには、次のいずれかの操作を実行できます。

  • 競合する Virtual Service を単一のリソースにマージします。
  • メッシュゲートウェイに接続された Virtual Service 間で、ホスト名を一意にします。
  • exportTo フィールドを設定して、リソースを特定のネームスペースにスコープします。

ネームスペース team1productpage Virtual Service は、team2 ネームスペースの custom Virtual Service と競合します。これは、以下の両方が当てはまるためです。

  • カスタムゲートウェイが指定されていないため、どちらもデフォルトの「メッシュ」ゲートウェイに接続されています。
  • どちらも同じホスト 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 フィールドを . に設定して、各 Virtual Service が自身のネームスペースのみにスコープされるようにします。

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