マルチクラスタトラフィック管理
マルチクラスタメッシュ内では、クラスタトポロジに固有のトラフィックルールが望ましい場合があります。このドキュメントでは、マルチクラスタメッシュ内のトラフィックを管理する方法をいくつか説明します。このガイドを読む前に
- デプロイメントモデルをお読みください。
- デプロイされたサービスが名前空間同一性の概念に従っていることを確認してください。
クラスタ内のトラフィック維持
場合によっては、デフォルトのクラスタ間ロードバランシング動作が望ましくないことがあります。トラフィックを「クラスタローカル」(つまり、cluster-a
から送信されたトラフィックはcluster-a
内の宛先のみ到達する)に維持するには、ホスト名またはワイルドカードをMeshConfig.serviceSettings
を使用してclusterLocal
としてマークします。
たとえば、個々のサービス、特定の名前空間内のすべてのサービス、またはメッシュ内のすべてのサービスに対してグローバルに、クラスタローカルトラフィックを強制できます。
serviceSettings:
- settings:
clusterLocal: true
hosts:
- "mysvc.myns.svc.cluster.local"
serviceSettings:
- settings:
clusterLocal: true
hosts:
- "*.myns.svc.cluster.local"
serviceSettings:
- settings:
clusterLocal: true
hosts:
- "*"
サービスのパーティショニング
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-v2
、cluster-2-v2
)。このアプローチは、クラスタベースのルーティングをより詳細に制御する必要がある場合にのみ、最適です。