Проблемы аварийного переключения локальной сети 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 при работе в «голой» среде. К клиенту должна быть прикреплена служба . При предоставлении услуги местоположение извлекается из первого экземпляра. Однако если служба не определена, поставщик облачных метаданных используется для назначения местоположения экземплярам прокси (сам вспомогательный модуль запрашивает сервер метаданных).
Видеть: