Керування трафіком у мультикластерній мережі

У межах мультикластерної mesh-мережі можуть бути бажаними правила трафіку, специфічні для топології кластерів. У цьому документі описані кілька способів керування трафіком у мультикластерній mesh-мережі. Перед тим, як прочитати цей посібник:

  1. Прочитайте Моделі розгортання.
  2. Переконайтеся, що ваші розгорнуті сервіси відповідають концепції однаковості просторів імен.

Залишення трафіку в межах кластера

У деяких випадках стандартна поведінка балансування навантаження між кластерами може бути небажаною. Щоб залишити трафік “локальним для кластера” (тобто трафік, надісланий з cluster-a, досягатиме лише пунктів призначення в cluster-a), позначте імена хостів або шаблони як clusterLocal, використовуючи MeshConfig.serviceSettings.

Наприклад, можна застосувати кластер-локальний трафік для окремого сервісу, всіх сервісів у певному просторі імен або глобально для всіх сервісів у мережі, як показано нижче:

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

Розділення сервісів

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). Цей підхід найкраще використовувати в ситуаціях, коли потрібен більш детальний контроль маршрутизації на основі кластера.

Чи була ця інформація корисною?
Чи є у вас пропозиції щодо покращення?

Дякуємо за ваш відгук!