我的理解是,将Service
类型设置为LoadBalancer
会创建一个新的Azure负载平衡器,并将IP地址分配给Service
。这是否意味着我可以使用端口80拥有多个服务?如果我的Service
之后的应用程序(ASP.NET Core应用程序)可以处理TLS和HTTPS,为什么我不应该对要公开给LoadBalancer
的任何Service
使用Ingress
上网吗?
如果我不关心TLS终止(可以让Cloudflare处理TLS终止),那么使用Ingress
有什么好处?如果有的话,它会通过为每个请求添加一个额外的跃点来减慢速度。
以下一些答案提到创建负载均衡器是很昂贵的。应该注意的是,Azure上的负载平衡器是免费的,但是它们确实会为IP地址收费,免费为您提供五个。因此,对于要公开最多五个IP地址的小型项目,它实际上是免费的。除此之外,您可能还想看看广告Ingress
。
如果您不使用external-dns
,有些答案还会提到额外的复杂性。我已经提到Cloudflare可以为我处理TLS终止。我还发现了Ingress
Kubernetes项目,可以在Cloudflare中创建指向负载均衡器IP地址的DNS条目?在我看来,淘汰{{1}}可以降低复杂性,因为这是我必须配置和管理的一件少事。 Ingress的选择也很广泛,很可能我会选择错误的Ingress,但一段时间后将无法维护。
答案 0 :(得分:3)
不,您不能在端口80上监听多个服务,因为负载平衡器将不知道将它们路由到何处(但是,ingress会知道)。如果可以将每个服务托管在不同的端口上,则可以使用负载平衡器。或者,如果您对每个服务都有公用ip,并且每个服务上都有不同的后端端口,则可以实现此目的。
quote:您输入的协议和端口组合与该负载均衡器使用的另一个规则匹配。负载均衡器上每个负载均衡规则和入站NAT规则的协议和端口组合必须唯一。
再次,如果您是开发人员,您可能不会意识到管理入口证书而不是管理所有应该访问的单个容器上的证书要方便得多
答案 1 :(得分:2)
有一篇不错的文章here,其中描述了Service(负载均衡器)和Ingress的区别。
总而言之,您可以在集群中拥有多个Service(负载均衡器),每个应用程序都独立于彼此公开。主要问题是,添加的每个负载均衡器都会增加解决方案的成本,除非您严格需要,否则不必这样做。
如果多个应用程序侦听端口80,并且它们位于容器内,则没有理由也不需要将其映射到主机节点中的端口80。您可以将其分配给任何端口,因为该服务将为您处理动态端口映射。
在这种情况下,入口是最好的,因为您可以在端口80上列出一个入口,然后根据许多变量将流量路由到正确的服务,例如:
进入不仅是为了TLS终止,简单来说就是代理\网关,它将控制路由到正确的服务,TLS终止只是功能之一。