Мы расширяем наше приложение для микросервисного стада, и я смотрел на Кубернете для наших нужд. До моего погружения в современные оркестровки я думал об открытии сервиса следующим образом:Кубернетес - безопасность внутренней балансировки нагрузки
- Кластера загрузился с каким-то распределенной службой реестра (консул в нашем случае)
- Каждой службу запускаются с реестром службы конечные точки, передаваемые в каким-то образом
- Каждый сервис самостоятельно регистрирует себя в реестре
- Когда служба нуждается в некоторых других служебных адресов, она извлекает точки контакта из реестра
В этом случае, если какая-либо услуга терпит неудачу или произойдет какое-то сетевое нарушение, служба клиента может перейти к следующей точке контакта и, в конечном счете, преуспеть (в случае, если она не полностью отключена). Насколько я понял, kubernetes использует совершенно другую модель:
- Всех стручки самостоятельно зарегистрированы в kubernetes
- Kubernetes обеспечивает экземпляр балансира одного нагрузок для передачи трафика через к услугам самого
- балансировки нагрузки может быть обнаружены через переменные среды или DNS-запрос (и это может привести к жутким вещам, таким как выборка из записей DNS или просто устаревшей переменной окружения)
И это меня немного смущает. Если я прав (не стесняйтесь сказать мне, что нет, если это так), это в основном превращает балансировщик нагрузки в SPOF, который может остановить все приложение в момент его смерти. Я прав? Существуют ли какие-либо гарантии Кубернеса о том, что такая ситуация не будет или будет решена в <N> < единиц времени >?
Я довольно сонный прямо сейчас, но я думаю, что понимаю. Последнее, что я хочу спросить - реализация iptables всегда маршрутизируется на тот же бэкэнд до реконфигурации, не так ли? – Etki
Одно соединение будет направлено на один и тот же сервер, но несколько соединений будут сбалансированы по нагрузке. kube-proxy настраивает iptables w/'-m statistic -mode random -probability {1/N}' для каждого бэкэнд, где N - количество бэкэндов. –