AKS LoadBalancer 仅将流量发送到一个 pod
AKS LoadBalancer only sends traffic to one pod
我在五节点集群 运行 1.9.11 上将服务配置为 LoadBalancer 运行。 LoadBalancer 位于三个 pods 运行 一个 ASP.NET 核心 Web 应用程序之前(这反过来与 NATS 消息队列对话,侦听器从中检索消息并将它们保存到 Azure SQL 数据库)。所有 pods 都设置了资源请求和限制,所有内容都在专用命名空间中。
我正在使用 PowerShell 脚本使 Web 应用程序每 50 毫秒为 NATS 队列生成一条消息。我可以从几种方式看出 Loadbalancer 只向一个 pod 发送流量:首先,k8s 仪表板中的 CPU 图表显示两个 pods 没有 activity,其次我'追踪环境。 MachineName 从 Web 应用程序一直到数据库中的一个字段,我可以看到它只有一个 MachineName。如果我删除正在接收流量的 pod,一个新的 pod 会立即开始接收流量,但它仍然只是三个中的那个 pod。
我的理解是,这不是 LoadBalancer 的预期工作方式,即 LoadBalancer 应该向所有 pods 发送流量。这是对的吗?如果是的话,我做错了什么有什么线索吗?我的服务文件如下:
apiVersion: v1
kind: Service
metadata:
name: megastore-web-service
spec:
selector:
app: megastore-web
ports:
- port: 80
type: LoadBalancer
我觉得您的负载平衡器工作正常。当流量进入 LB 时,LB 会自动将流量定向到第一个可用节点。您可以关闭 POD 并重新路由流量这一事实是意料之中的。
这是一篇很好的文章,有助于解释 LB 的工作原理
为了进一步测试,我建议您尝试在其中一个 PODs 上打开一个端口,而不是其他的。比如POD2上的88端口。然后使用 loadbalancer:88 连接并查看连接是否路由到正确的 POD。
我在五节点集群 运行 1.9.11 上将服务配置为 LoadBalancer 运行。 LoadBalancer 位于三个 pods 运行 一个 ASP.NET 核心 Web 应用程序之前(这反过来与 NATS 消息队列对话,侦听器从中检索消息并将它们保存到 Azure SQL 数据库)。所有 pods 都设置了资源请求和限制,所有内容都在专用命名空间中。
我正在使用 PowerShell 脚本使 Web 应用程序每 50 毫秒为 NATS 队列生成一条消息。我可以从几种方式看出 Loadbalancer 只向一个 pod 发送流量:首先,k8s 仪表板中的 CPU 图表显示两个 pods 没有 activity,其次我'追踪环境。 MachineName 从 Web 应用程序一直到数据库中的一个字段,我可以看到它只有一个 MachineName。如果我删除正在接收流量的 pod,一个新的 pod 会立即开始接收流量,但它仍然只是三个中的那个 pod。
我的理解是,这不是 LoadBalancer 的预期工作方式,即 LoadBalancer 应该向所有 pods 发送流量。这是对的吗?如果是的话,我做错了什么有什么线索吗?我的服务文件如下:
apiVersion: v1
kind: Service
metadata:
name: megastore-web-service
spec:
selector:
app: megastore-web
ports:
- port: 80
type: LoadBalancer
我觉得您的负载平衡器工作正常。当流量进入 LB 时,LB 会自动将流量定向到第一个可用节点。您可以关闭 POD 并重新路由流量这一事实是意料之中的。
这是一篇很好的文章,有助于解释 LB 的工作原理
为了进一步测试,我建议您尝试在其中一个 PODs 上打开一个端口,而不是其他的。比如POD2上的88端口。然后使用 loadbalancer:88 连接并查看连接是否路由到正确的 POD。