Балансировщик сетевой нагрузки прослушивает несколько портов с несколькими целями

У меня есть вариант использования, когда мне нужно настроить AWS Network Load Balancer, который прослушивает примерно 20 000 различных портов с высоким уровнем (30 000+). NLB должен находиться перед набором целевых узлов (экземпляров EC2) и направлять трафик с порта, который прослушивает NLB, на тот же порт в одном из экземпляров EC2 (все экземпляры EC2 будут прослушивать все порты). , так что циклический перебор между инстансами EC2 вполне удобен). Например, request->NLB:32355->{one of any instance}:32355.

Я вижу, что могу создавать TargetGroups, которые позволяют мне указать набор экземпляров и порты, через которые они должны быть доступны. Однако мне непонятно, как я могу связать порт на балансировщике сетевой нагрузки с портом на одном из экземпляров. Например, мне нужен порт 32355 на NLB, чтобы его отправили на порт 32355 на любом из инстансов EC2, но только на этот порт, и то же самое должно произойти для всех остальных 19 999 портов, которые я прослушиваю.

Дальнейший контекст: это кластер Kubernetes с кучей узлов за NLB, у которых есть открытые порты NodePorts. Мне нужно связаться с этими NodePorts через NLB. Прежде чем появятся предложения о различных способах обработки этого на k8s: поверьте мне, мы все продумали, и вариант глобального порта LB->node является нашим лучшим выбором здесь.

Дополнительный вопрос: количество узлов, стоящих за NLB, является эластичным и может увеличиваться или уменьшаться в любое время. Есть ли динамический способ, с помощью тегов или чего-то еще, чтобы гарантировать, что TargetGroups содержит все узлы, которые мне нужны?


person Lee Hampton    schedule 19.08.2019    source источник


Ответы (1)


Для этого вы можете использовать type: LoadBalancer в своей службе Kubernetes.

kind: Service
apiVersion: v1
metadata:
  name: service
  namespace: default
labels:
  app: service
spec:
  selector:
    app: app
  ports:
  - protocol: TCP
    port: 32355
    name: port
    targetPort: 32355
  type: LoadBalancer

Это автоматически создаст и свяжет ваш балансировщик нагрузки с нужным портом на узле, и трафик будет перенаправлен с этого порта на службу и, следовательно, на ваше приложение. К сожалению, вам придется сделать это для каждого порта. На GitHub открыта проблема с поддержкой динамических диапазонов портов:

https://github.com/kubernetes/kubernetes/issues/23864

person user277187    schedule 20.08.2019
comment
К сожалению, это создаст балансировщик нагрузки для каждого порта узла, тогда как я хочу создать глобальный балансировщик нагрузки, который направляет все порты на всех узлах. - person Lee Hampton; 20.08.2019
comment
вы можете просто добавить порты в эту службу, все они будут работать на одном и том же балансировщике нагрузки. - person user277187; 21.08.2019