在 Azure AKS 中使用 Kubernetes Ingress 都有哪些优势

Posted

技术标签:

【中文标题】在 Azure AKS 中使用 Kubernetes Ingress 都有哪些优势【英文标题】:What are the Advantages of using Kubernetes Ingress in Azure AKS在 Azure AKS 中使用 Kubernetes Ingress 有哪些优势 【发布时间】:2019-04-24 05:23:12 【问题描述】:

我的理解是,将Service 类型设置为LoadBalancer 会创建一个新的Azure 负载均衡器并为Service 分配一个IP 地址。这是否意味着我可以使用端口 80 拥有多个服务?如果我的 Service(一个 ASP.NET Core 应用程序)背后的应用程序可以处理 TLS 和 HTTPS,为什么我不应该将 LoadBalancer 用于我想要暴露给互联网的任何 Service

如果我不关心 TLS 终止(您可以让 Cloudflare 处理 TLS 终止),使用 Ingress 有什么好处?如果有的话,它会通过为每个请求添加一个额外的跃点来减慢速度。

更新

下面的一些答案提到创建负载平衡器的成本很高。应该注意的是,Azure 上的负载均衡器是免费的,但它们对 IP 地址收费,他们免费为您提供五个 IP 地址。因此,对于要公开最多五个 IP 地址的小型项目,它基本上是免费的。除此之外,您可能还想看看广告Ingress

如果您不使用Ingress,一些答案还会提到额外的复杂性。我已经提到 Cloudflare 可以为我处理 TLS 终止。我还发现了 external-dns Kubernetes 项目在 Cloudflare 中创建指向负载均衡器 IP 地址的 DNS 条目?在我看来,删除Ingress 可以降低复杂性,因为它是我必须配置和管理的一件事。 Ingress 的选择也很大,很可能我会选错一个,它会在一段时间后停止维护。

【问题讨论】:

【参考方案1】:

有一篇很好的文章 here 描述了 Service(Load Balancer) 和 Ingress 的区别。

总而言之,集群中可以有多个服务(负载均衡器),其中每个应用程序彼此独立地公开。主要问题是添加的每个负载均衡器都会增加您的解决方案的成本,并且不必如此,除非您非常需要这样做。

如果多个应用程序在端口 80 上侦听,并且它们在容器内,则没有理由还需要将其映射到主机节点中的端口 80。您可以将其分配给任何端口,因为 Service 将为您处理动态端口映射。

在这种情况下,入口是最好的,因为您可以在端口 80 上列出一个入口,并根据许多变量将流量路由到正确的服务,例如:

域 网址路径 查询字符串 还有许多其他

Ingress in 不仅仅用于 TLS 终止,简单来说,它是一个代理\网关,将控制到正确服务的路由,TLS 终止只是功能之一。

【讨论】:

Azure 负载均衡器(基本 SKU)的成本为 0 英镑,而 AKS 的负载均衡器并不昂贵。它适用于 AWS EKS,我不确定 Google GKE。 技术上你是正确的,但是 Azure 你为 IP 付费,每个公共 LB 需要一个 IP 才能工作,如果我没记错的话,我想你有 5 个免费的!【参考方案2】:

不,您不能在端口 80 上侦听多个服务,因为负载均衡器不知道将它们路由到哪里(但是入口会)。如果您可以将每个服务托管在不同的端口上,则可以使用负载均衡器。或者,如果您有每个服务的公共 IP 和每个服务的不同后端端口,您可以实现这一点。

quote:您输入的协议和端口组合与此负载均衡器使用的另一个规则相匹配。负载均衡器上每个负载均衡规则和入站 NAT 规则的协议和端口组合必须是唯一的。

同样,如果您是开发人员,您可能没有意识到在入口而不是在所有应该可以访问的单个容器上管理证书是多么方便

【讨论】:

但是如果负载均衡器是一个单独的 IP 地址,那么理论上每个都可以在端口 80 上拥有自己的应用程序。负载均衡器可以将端口 80 请求路由到不同端口上的服务吗? 我猜唯一的缺点可能是成本,我不确定定价是如何计算的或您支付的费用是多少?从好的方面来说,您不会为运行入口容器的计算能力付费。顺便说一句,我认为您可以使用 Cloudflare 进行 TLS 终止。我怀疑这是使用 Kubernetes 时最快、最便宜的折衷方案。 不,最大的缺点是复杂性。 IP 地址几乎没有成本。在不同的部署上管理证书将是一场噩梦。你也必须为此编写代码。真的没有意义 在 Azure 中,LoadBalancer 类型的每个服务都会获得一个新的 PublicIP,该公共IP 附加到创建此类型的第一个服务时创建的负载均衡器。所以完全可以在同一个端口上暴露多个服务。 @4c74356b41 您可以使用external-dns项目在Kubernetes中配置DNS。此外,Cloudflare 可以进行 TLS 终止,因此无需管理证书。从理论上讲,这使应用程序变得更快(我无需支付额外的 Ingress 步骤来管理和运行)并且更简单。

以上是关于在 Azure AKS 中使用 Kubernetes Ingress 都有哪些优势的主要内容,如果未能解决你的问题,请参考以下文章

使用 vnet_subnet_id 通过 terraform 启动 AKS 群集 - Azure

从 AKS 访问 Azure Blob 存储

是否有用于 Azure AKS(Azure kubernetes 服务)集群的 API 网关

停止 AKS(Azure 托管 Kubernetes)中的所有计算

配置了 Azure AD RBAC 的 Azure DevOp Pipelines 对 AKS 的身份验证?

在 C# 应用程序中获取集群 azure kubernetes 服务 (AKS) 运行状况/可用性