Azure Loadbalancer 如何与 Azure AKS 配合使用

Azure Loadbalancer 如何与 Azure AKS 配合使用

我最近试图弄清楚 Azure AKS 群集前面的 Azure 负载均衡器实际上是如何将流量路由到群集节点的。

我们的(相当基本的)设置:

  • AKS 群集版本 1.23.x,其前面有默认 Azure 负载均衡器
  • 使用服务类型 Loadbalancer 部署的 Traefik Ingress 控制器

也许有人可以回答我以下问题:

  1. Ingress 后端池包含所有集群节点,而不仅仅是运行 ingress pod 的节点(它们也只显示 pod 的私有 IP)。如果我理解文档的话(https://docs.microsoft.com/en-us/azure/aks/concepts-network#services) 正确地说,负载均衡器在所有集群节点之间分配流量,然后从那里转发到实际运行 Ingress 控制器 pod 的节点。这可能会增加不必要的跳数,并因转发而浪费带宽。我的理解正确吗?

  2. 我很难理解流量如何从负载均衡器转发到集群节点。后端池包含具有节点私有 IP(无 k8s 服务 IP 或 pod IP)的条目,并且负载均衡规则显示端口 443 作为源端口和目标端口。但是,任何集群节点上都没有监听端口 443 的进程。有人可以向我解释(或指出我未能找到的文档)来解释这是如何工作的吗?

答案1

这可能会增加不必要的跳数,并因转发而浪费带宽。我的理解正确吗?

这是一种看待问题的方式,另一种方式是,如果负载均衡器仅指向包含“当前就绪”pod 的节点,则当其中一个节点未就绪或该节点因任何原因死亡时,它需要更新。我从未经历过云变化发生得如此之快,而对于大多数私有网络设置,集群内流量基本上是免费的

有人可以向我解释(或指出我未能找到的文档)来解释这是如何工作的吗?

我无法解释你使用的任何 Azure 术语,但 kubernetes 使用的底层机制是NodePort通过它选择一个(大部分是随机的,尽管如果你有强烈的意见,可以选择一个)免费端口全部节点,然后将负载均衡器的流量指向该端口,集群内部的流量到达匹配的流量端口Service

答案2

后端映射到 443,尽管它应该映射到 NodePort,因为在节点上,Kubernetes 使用 IPTables 进行代理。这在这篇文章中有解释AKS 网络深度探究博客文章中提到Github 问题

相关内容