是否需要入口和入口控制器

Is an ingress and ingress contoller needed

我是一个 kubernetes 新手,无论我读了多少关于它的资料,我都无法解决这个问题。
我有一个简单的部署,它使用一个不太复杂的应用程序创建一个 pod。
我知道入口和入口控制器在做什么,但据我所知,我不需要在外部公开我的 pod-app。
只有一个 LoadBalancer 服务就足够了。
我不需要一个以上的流量路由规则。
我错了吗?

传统上,您会为每个要对外公开的服务创建一个 LoadBalancer 服务。这可能会变得相当昂贵。 Ingress 为您提供了一种基于请求主机或路径将请求路由到服务的方法,将大量服务集中到一个入口点。

此外,负载均衡器配置也需要时间,并且仅适用于受支持的云提供商,例如 AWS、GCP 等

另外需要考虑的是 L4(TCP/UDP) 层路由的需求,因为 kubernetes Ingress API 主要是 L7 层,但一些入口控制器如 traefik,nginx 支持 L4 层(TCP/UDP) 以及 L7 层 (HTTP) 路由。

所以回答你的问题取决于你的环境和用例。

Ingress 和 IngressControllers 用于第 7 层的流量路由,即,如​​果您的后端使用 HTTP、GRPC 等 L7 协议。您可以使用 Ingress 根据请求路径将请求路由到不同的后端服务。

  • 如果您的应用不在第 7 层运行,您可能不需要 Ingress。

  • 如果将应用程序从非 kubernetes 环境迁移到 kuberneters,您可能会问自己的另一个问题是 - 您是否已经在使用像 nginx 这样的反向代理?如果是这样,您可能 想要使用 Ingress。我说 可能 因为没有必要。您可以通过 运行 将 nginx 容器用作 pod,实现与使用 Ingress 相同的效果,自己编写 nginx.conf 并使其在外部可用(例如使用 LoadBalancer 服务)。相反,通过使用 IngressController,您无需维护 nginx pod 或编写 nginx.conf。您可以改为表达与 Ingress 资源相同的配置,这要简单得多。

如果您想向外部公开您的服务,则需要 Ingress。特别是 layer 7 in OSI model(HTTP 传输)。 Ingress 还提供了在负载均衡器中启用 TLS 支持的机制。流量路由由 Ingress 资源上定义的规则控制。 Ingress 可以配置为提供服务外部可访问的 URL、负载平衡流量、终止 SSL/TLS 并提供基于名称的虚拟主机。 Ingress 控制器负责实现 Ingress,通常使用负载均衡器,但它也可以配置您的边缘路由器或其他前端来帮助处理流量。

默认情况下,Ingress 控制器取决于您使用的是哪种云提供商,或者如果您在内部使用,则需要根据需要进行设置。在一个集群中,您也可以创建多个 Ingress 控制器。 Ingress controller有很多种,大家可以去this article看看。

我想 this article about Load Balancer and Ingress 也可能有帮助。