繁体   English   中英

创建 Azure Kubernetes 入口控制器以限制每个 Pod 1 个连接

[英]Create Azure Kubernetes ingress controller to limit 1 connection per pod

我正在使用 Azure Kubernetes 服务并且有一个独特的场景,我希望每个 pod 只允许一个连接。 我使用“高级”网络选项来设置我的集群,以便每个 pod 都有自己的内部 IP 地址。 问题是,所有这些 pod 都位于公共负载均衡器 IP 地址之后,负载均衡器决定将流量路由到何处。

我需要 A) 设置一个规则,使负载均衡器只允许每个 Pod 一个连接并将新流量路由到新 Pod,每个请求 1 个,或 B) 设置一个入口控制器来执行相同的操作。 我认为 B) 是解决方案,但我对如何做到这一点没有明确的途径。 我看到您可以通过 URL 路由,但是您必须为每个 pod 设置规则,这绝对不是一个好主意。 有没有办法设置一个规则,只限制每个 pod 1 个会话? 或者其他一些类似的方法。

谢谢。

这个问题问得好。 根据您在问题第二部分中建议的解决方案,我想在此处添加我的意见。 但是,不仅限于使用这些或仅使用这些是可能的,还有人们建立与其 Pod 的连接的最有效的高级方法。

A.),我在看你怎么路由你的流量到您的pods从负载平衡器的默认值,一般每荚Kubernetes集群内获得的它自己的IP。 如果我们知道您如何管理从外部世界到每个 Pod 的流量。 我可以将我的答案添加到A part of possible solutions。 但不建议采用这种方法,因为你的 pod 更有可能死掉,并且可能会创建一个具有新 ip 的新 pod,你需要手动将流量路由到新创建的 pod,这就是人们选择 kubernetes 而不是手动管理 docker 的原因虚拟机上的容器。 但我可能是错的,你可能有不同的复杂系统,但这是有争议的。

B.) 就像你说的,研究了 Ingress 和 Services 也是一种解决方案,不幸的是,目前还没有可用的入口控制器注释,它只限制每个 pod 的一个连接,但就像你说的,基于 URL 的将是解决方案的一部分,但是同样,正如您已经确定的那样,这种方式会产生开销,它更像是每个 Pod 的单个服务和每个服务的子域。 它更像是具有与之关联的独特服务和具有独特子域的独特服务的单一部署。 这是一个复杂的设置,但可行。

根据评论编辑(已删除 HPA)

根据您添加的信息,我可以建议一种不同的方法,但使用 kubernetes 的方式有点wrong ,但同样根据您计划实现的系统类型,这是有争议的。 在其中一个节点上运行自己的代理服务器(HAProxy、NGINX 或您的最爱),并使用代理中 pod 的内部 ip 将来自外部世界的流量直接路由到您的 pod。 您可以根据代理配置中的连接数等进行路由,请记住这不是您的 kubernetes pod,它是您的操作系统运行的独立服务。 但是当节点死亡时要小心 pod 死亡,pod 的 ip 地址也是如此。

但这是我们不应该做的事情,我相信在几周左右的时间里,您会更全面地了解 K8s 及其活动部件,您可能会说这是错误的,因为有很多手动设置开销。

希望这是有帮助的。

我对 k8s 世界还很陌生,但据我所知,您应该能够使用 Nginx 入口控制器中的nginx.org/max-conns注释来做到这一点:

https://docs.nginx.com/nginx-ingress-controller/configuration/ingress-resources/advanced-configuration-with-annotations/

这样,您应该能够将每个“上游”或 Pod 的连接数限制为 1 个。

即负载均衡器将流量定向到 Nginx,Nginx 将流量代理到每个 Pod 一个并发请求的 Pod。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM