マルチクラスタトラフィック管理

マルチクラスタメッシュ内では、クラスタトポロジに固有のトラフィックルールが望ましい場合があります。このドキュメントでは、マルチクラスタメッシュ内のトラフィックを管理する方法をいくつか説明します。このガイドを読む前に

  1. デプロイメントモデルをお読みください。
  2. デプロイされたサービスが名前空間同一性の概念に従っていることを確認してください。

クラスタ内のトラフィック維持

場合によっては、デフォルトのクラスタ間ロードバランシング動作が望ましくないことがあります。トラフィックを「クラスタローカル」(つまり、cluster-aから送信されたトラフィックはcluster-a内の宛先のみ到達する)に維持するには、ホスト名またはワイルドカードをMeshConfig.serviceSettingsを使用してclusterLocalとしてマークします。

たとえば、個々のサービス、特定の名前空間内のすべてのサービス、またはメッシュ内のすべてのサービスに対してグローバルに、クラスタローカルトラフィックを強制できます。

serviceSettings:
- settings:
    clusterLocal: true
  hosts:
  - "mysvc.myns.svc.cluster.local"

サービスのパーティショニング

DestinationRule.subsetsを使用すると、ラベルを選択することでサービスをパーティション分割できます。これらのラベルは、Kubernetesメタデータからのラベル、または組み込みラベルから取得できます。DestinationRuleのサブセットセレクタ内の組み込みラベルの1つであるtopology.istio.io/clusterを使用すると、クラスタごとのサブセットを作成できます。

apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: mysvc-per-cluster-dr
spec:
  host: mysvc.myns.svc.cluster.local
  subsets:
  - name: cluster-1
    labels:
      topology.istio.io/cluster: cluster-1
  - name: cluster-2
    labels:
      topology.istio.io/cluster: cluster-2

これらのサブセットを使用して、ミラーリングシフトなど、クラスタに基づいたさまざまなルーティングルールを作成できます。

これは、VirtualServiceで宛先サブセットを制限することで、クラスタローカルトラフィックルールを作成する別のオプションを提供します。

apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: mysvc-cluster-local-vs
spec:
  hosts:
  - mysvc.myns.svc.cluster.local
  http:
  - name: "cluster-1-local"
    match:
    - sourceLabels:
        topology.istio.io/cluster: "cluster-1"
    route:
    - destination:
        host: mysvc.myns.svc.cluster.local
        subset: cluster-1
  - name: "cluster-2-local"
    match:
    - sourceLabels:
        topology.istio.io/cluster: "cluster-2"
    route:
    - destination:
        host: mysvc.myns.svc.cluster.local
        subset: cluster-2

MeshConfig.serviceSettingsではなく、この方法でサブセットベースのルーティングを使用してクラスタローカルトラフィックを制御する場合、サービスレベルポリシーとトポロジレベルポリシーが混在するという欠点があります。たとえば、サービスのv2にトラフィックの10%を送信するルールでは、サブセットの数が2倍必要になります(例:cluster-1-v2cluster-2-v2)。このアプローチは、クラスタベースのルーティングをより詳細に制御する必要がある場合にのみ、最適です。

この情報は役に立ちましたか?
改善のための提案はありますか?

ご意見ありがとうございます!