Предоставление конечной точки службы TCP K8s общедоступному Интернету без балансировщика нагрузки - PullRequest
0 голосов
/ 21 февраля 2019

Итак, я работаю над проектом, который включает управление многими экземплярами 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.

Любые предложения будут с благодарностью.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Реализация входного контроллера Kubernetes Contour от Heptio can прокси TCP потоков , когда они инкапсулированы в TLS.Это необходимо для использования рукопожатия SNI, чтобы направить соединение к правильному бэкэнд-сервису.

Contour может обрабатывать ingresses, но дополнительно вводит новый входной API IngressRoute , которыйосуществляется через CRD.Соединение TLS может быть прервано в вашей бэкэнд-службе .IngressRoute может выглядеть так:

apiVersion: contour.heptio.com/v1beta1
kind: IngressRoute
metadata:
  name: postgres
  namespace: postgres-one
spec:
  virtualhost:
    fqdn: postgres-one.example.com
    tls:
      passthrough: true
  tcpproxy:
    services:
    - name: postgres
      port: 5432
  routes:
  - match: /
    services:
    - name: dummy
      port: 80
0 голосов
/ 26 февраля 2019

га прокси поддерживает балансировку нагрузки tcp.Вы можете посмотреть на ha-proxy как прокси и балансировщик нагрузки для базы данных postgres.он может поддерживать как tls, так и non tls соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...