我有一个用例,我需要设置一个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包含我需要的所有节点?
答案 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上存在一个支持动态端口范围的问题: