Итак, я работаю над проектом, который включает управление многими экземплярами postgres внутри кластера k8s.Каждый экземпляр управляется с помощью Stateful Set
с Service
для сетевого взаимодействия.Мне нужно выставить каждый Service
в общедоступный интернет через DNS через порт 5432.
Наиболее естественный подход здесь - это использовать ресурс k8s Load Balancer
и что-то вроде external dns длядинамически сопоставлять имя DNS с конечной точкой балансировщика нагрузки.Это отлично подходит для многих типов услуг, но для баз данных существует одно серьезное ограничение: время ожидания простоя .Максимальное время ожидания простоя AWS ELB составляет 4000 секунд.Существует много длительных аналитических запросов / транзакций, которые легко превышают это время, не говоря уже о потенциально длительных операциях, таких как pg_restore
.
Так что мне нужно какое-то решение, которое позволило бы мне обойти ограничения балансировки нагрузки.Node IPs
не может быть и речи, поскольку мне понадобится порт 5432
, открытый для каждого экземпляра postgres в кластере.Ingress
также кажется далеко не идеальным, поскольку это прокси 7-го уровня, который поддерживает только HTTP / HTTPS.Я видел обходные пути с nginx-ingress, включающие некоторые изменения в configmap, но я немного беспокоюсь о том, чтобы совершать подобные хаки для большого проекта.ExternalName
интригует, но даже если я найду лучшую документацию по нему, я думаю, что он может иметь такие же ограничения, как NodeIP
.
Любые предложения будут с благодарностью.