Керування трафіком у мультикластерній мережі
У межах мультикластерної mesh-мережі можуть бути бажаними правила трафіку, специфічні для топології кластерів. У цьому документі описані кілька способів керування трафіком у мультикластерній mesh-мережі. Перед тим, як прочитати цей посібник:
- Прочитайте Моделі розгортання.
- Переконайтеся, що ваші розгорнуті сервіси відповідають концепції однаковості просторів імен.
Залишення трафіку в межах кластера
У деяких випадках стандартна поведінка балансування навантаження між кластерами може бути небажаною. Щоб залишити трафік “локальним для кластера” (тобто трафік, надісланий з cluster-a
, досягатиме лише пунктів призначення в cluster-a
), позначте імена хостів або шаблони як clusterLocal
, використовуючи MeshConfig.serviceSettings
.
Наприклад, можна застосувати кластер-локальний трафік для окремого сервісу, всіх сервісів у певному просторі імен або глобально для всіх сервісів у мережі, як показано нижче:
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 або з вбудованих міток. Одна з таких вбудованих міток, topology.istio.io/cluster
, у селекторі підмножин для DestinationRule
дозволяє створювати підмножини для кожного кластера.
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
, має недолік змішування політики рівня сервісу з політикою рівня топології. Наприклад, правило, яке надсилає 10% трафіку на v2
сервісу, вимагатиме вдвічі більше підмножин (наприклад, cluster-1-v2
, cluster-2-v2
). Цей підхід найкраще використовувати в ситуаціях, коли потрібен більш детальний контроль маршрутизації на основі кластера.