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

时间:2020-02-13 15:09:36

标签: nginx kubernetes kubernetes-ingress nginx-ingress kubernetes-service

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

3 个答案:

答案 0 :(得分:4)

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

负载均衡器配置还需要时间,并且仅在受支持的云提供商(例如AWS,GCP等)中起作用。

要考虑的另一件事是需要L4(TCP / UDP)层路由,因为kubernetes Ingress API主要是L7层,但是某些入口控制器(例如traefik,nginx)与L7一起支持L4层(TCP / UDP)层(HTTP)路由。

因此,您的问题的答案取决于您的环境和用例。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

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

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