我知道Ingress可以在想要使用单个负载均衡器/公共IP暴露多个服务/路由时使用。
现在我想将我的Nginx服务器公开到互联网。我有两个选择:
- 将
服务类型设置为LoadBalancer
,这样我就能获得公共IP了。 - 使用Nginx Ingress Controller。
当我可以通过选项1完成任务时,为什么或何时会选择选项2?使用Ingress和不使用Ingress的优势是什么?
我知道Ingress可以在想要使用单个负载均衡器/公共IP暴露多个服务/路由时使用。
现在我想将我的Nginx服务器公开到互联网。我有两个选择:
服务类型设置为LoadBalancer
,这样我就能获得公共IP了。当我可以通过选项1完成任务时,为什么或何时会选择选项2?使用Ingress和不使用Ingress的优势是什么?
“ingress rule (ingress)”和“ingress controller”是不同的概念。因此,从技术上讲,nginx ingress controller和LoadBalancer类型的服务不能相互比较。可以将ingress资源和LoadBalancer类型的服务进行比较,如下所示:
一般而言:
LoadBalancer
类型的服务是L4(TCP)负载均衡器,用于将单个应用程序或服务公开给外部世界,并根据目标IP地址和端口进行负载平衡。
Ingress
类型的资源则会创建一个L7(HTTP / S)负载均衡器,用于同时公开多个服务,因为L7 LB具有应用程序感知功能,因此它可以根据应用程序状态确定将流量发送到何处。
ingress和ingress controller的关系:
Ingress
或ingress rules
是ingress controller
遵循以分发负载的规则。Ingress controller接收数据包,检查ingress规则并确定将数据包传递到哪个服务。
Nginx Ingress Controller
Nginx ingress控制器实际上使用LoadBalancer类型的服务作为进入集群的入口。然后它会检查入口规则并分配负载。这可能会让人感到困惑。您创建一个入口资源,它就会创建HTTP/S负载均衡器。它还会为您提供外部IP地址(例如在GKE上),但是当您尝试访问该IP地址时,连接会被拒绝。LoadBalancer
服务不能被配置为HTTP负载均衡器。仅仅因为某些云提供商可以实现这一点,并不意味着Kubernetes具有该功能。 - suren已接受的答案已经涵盖了很多内容。所有原因都是有效的,除此之外,我在AWS中使用Ingress控制器的原因是为了最小化成本。我有多个Web应用程序在Kubernetes集群中运行在AWS上。为了访问这些应用程序,我不是将每个应用程序公开为LoadBalancer并创建单独的ELB(每个ELB都需要花费一定的费用),而是将Ingress控制器服务公开为LoadBalancer,并为每个应用程序创建Ingress规则。
操作步骤如下: