【问题标题】:Network Load Balancer Listening on Multiple Ports with Multiple Targets网络负载均衡器侦听具有多个目标的多个端口
【发布时间】:2019-12-25 00:04:20
【问题描述】:

我有一个用例,我需要设置一个 AWS 网络负载均衡器来侦听大约 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-> 节点端口选项是我们最好的选择。

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

【问题讨论】:

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


    【解决方案1】:

    您可以在 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

    【讨论】:

    • 不幸的是,这将为每个 NodePort 创建一个负载均衡器,而我希望创建一个全局负载均衡器,路由到所有节点上的所有端口。
    • 您可以在该服务中添加端口,这些都将在同一个负载均衡器上运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    相关资源
    最近更新 更多