Проблемы аварийного переключения локальной сети Istio Multi-master

Я не могу заставить « мультиосновную мультисеть » хорошо работать с аварийным переключением локальности (или балансировкой нагрузки локальности, если уж на то пошло). Конечные точки прописаны нормально. istio-systemпомечен информацией о сети, и каждый узел помечен информацией о зоне и регионе, и когда я проверяю/clustersстранице в интерфейсе администратора envoy клиента, информация о зоне и регионе установлена ​​правильно для каждой конечной точки.

Похоже, проблема в том, что плоскость управления не назначает приоритет конечным точкам. Однако для устаревшего источника это должно работать автоматически при условии, что я создал DestinationRule (который у меня есть). Я также создал VirtualService на всякий случай.

      $ istioctl proxy-config endpoints -n client client-6889f68cbc-z5jb6 --cluster "outbound|80||server.server.svc.cluster.local" -o json | jq '.[0].hostStatuses[] | del(.stats)'
{
  "address": {
    "socketAddress": {
      "address": "10.244.1.25",
      "portValue": 80
    }
  },
  "healthStatus": {
    "edsHealthStatus": "HEALTHY"
  },
  "weight": 1,
  "locality": {
    "region": "region2",
    "zone": "zone2"
  }
}
{
  "address": {
    "socketAddress": {
      "address": "172.18.254.1",
      "portValue": 15443
    }
  },
  "healthStatus": {
    "edsHealthStatus": "HEALTHY"
  },
  "weight": 3,
  "locality": {
    "region": "region1",
    "zone": "zone1"
  }
}

Моя установка — это два кластера 1.20.2, работающие локально с использованием KinD + metallb, с оператором Istio v1.9.1. Каждый кластер настроен на занятие отдельного региона и зоны.

Истио против ВС и ДР

      apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: server
  namespace: server
spec:
  host: server
  trafficPolicy:
    connectionPool:
      http:
        http2MaxRequests: 10
        maxRequestsPerConnection: 10
    loadBalancer:
      localityLbSetting:
        enabled: true
      simple: ROUND_ROBIN
    outlierDetection:
      baseEjectionTime: 1m
      consecutive5xxErrors: 1
      interval: 1s
      maxEjectionPercent: 51
      minHealthPercent: 0
      apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: server
  namespace: server
spec:
  hosts:
  - server
  http:
  - route:
    - destination:
        host: server

Киали Вью

Как вы можете видеть на панели управления Kiali, DR и VS активны. Оба кластера маршрутизируются. Но трафик поступает к обоим одинаково, тогда как он должен идти только к одному. Я также пытался явно указать распространение и аварийное переключение в своей спецификации аварийного восстановления, но безуспешно.

1 ответ

Это ошибка в istio 1.9.1 при работе в «голой» среде. К клиенту должна быть прикреплена служба . При предоставлении услуги местоположение извлекается из первого экземпляра. Однако если служба не определена, поставщик облачных метаданных используется для назначения местоположения экземплярам прокси (сам вспомогательный модуль запрашивает сервер метаданных).

Видеть:

https://github.com/istio/istio/blob/bf5dd51386f4d78b20dd1f9c14f09b562a6ecd6e/pilot/pkg/xds/ads.go#L584-L600

Другие вопросы по тегам