网络负载平衡器在具有多个目标的多个端口上侦听

时间:2019-08-19 18:43:27

标签: amazon-web-services load-balancing aws-load-balancer

我有一个用例,我需要设置一个AWS Network Load Balancer,侦听大约20,000个不同的高端口(30000+)。 NLB需要坐在一组目标节点(EC2实例)的前面,并将流量从NLB侦听的端口路由到其中一个EC2实例的同一端口(所有EC2实例将侦听所有端口) ,因此在EC2实例之间进行轮询是完全可以的)。例如request->NLB:32355->{one of any instance}:32355

我看到可以创建TargetGroups,使我可以指定一组实例以及应该通过哪些端口访问它们。但是,我不清楚如何将NLB上的端口与其中一个实例上的端口相关联。例如,我需要NLB上的端口32355才能发送到任何EC2实例上的端口32355,但仅发送给该端口,并且我正在监听的所有其他19,999端口也会发生相同的情况。

更多上下文:这是一个Kubernetes群集,在NLB后面有一堆暴露了NodePort的节点。我需要通过NLB到达那些NodePort。在提出关于在k8s上处理此问题的不同方法的建议之前:请相信我,我们已经考虑到了这一点,全局LB-> node port选项是我们的最佳选择。

奖金问题:NLB后面的节点数是有弹性的,可以随时放大或缩小。是否有一种动态方式(通过标签或其他方式)来确保TargetGroups包含我需要的所有节点?

1 个答案:

答案 0 :(得分:0)

您可以在Kubernetes服务上使用type: LoadBalancer

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