我是否需要在Kubernetes容器中使用Nginx容器才能使用Web应用程序?

时间:2019-05-15 14:02:39

标签: nginx kubernetes

这是一个非常基本的问题,但我不知道答案。我有一个应具有三个容器的应用程序-前端,后端和数据库容器。

现在它们在不同的端口上提供服务,以从不同的端口请求数据。

所以我读到Pod,它是一个本地网络,容器可以通信。 Nginx可以参加吗?我的理解是,它不像吊舱那样管理容器之间的通讯。我的理解是,只有nginx才可以满足外部请求,并在一组相同容器的轮询样式中实现负载平衡。

如果有人可以帮助我理解这一点,我将不胜感激。

4 个答案:

答案 0 :(得分:3)

  1. 您将FE,BE和DB部署在不同的Pod(不同的部署)中,以分别扩展/管理它们。即使在不同的名称空间中也更好。
  2. 为BE&DB创建一个ClusterIP类型的k8s service。使用k8s DNS解析器访问它们-service-name.namespace.svc.cluster.local
  3. 创建类型为LoadBalancer或NodePort的k8s service,以供FE将其暴露在k8s之外。使用负载均衡器地址或node-ip:node端口进行访问。

答案 1 :(得分:1)

我建议不要将这3个容器放在同一个容器中。如果这样做,您将失去许多优势,例如能够独立扩展服务或能够在不破坏整个堆栈的情况下更新一个组件。只能将豆荚用于分组紧密耦合的容器。正如Kubernetes documentation所说:

  

Pod表示部署单位:   Kubernetes中的应用程序,可能包含一个   容器或少量紧密连接的容器,并且   共享资源。

您应该采用的方法是为每个组件制作一个Pod,并将这些组件放在Service之后,以便Pod可以彼此交互。一旦感到满意,您还应该查看DeploymentsStatefulsets,以扩展应用程序并在应用程序失败时提供恢复。

答案 2 :(得分:1)

除了@Max Lobur答案之外,在这里还必须提及Ingress Kubernetes资源,这是一种可以在群集之外公开前端应用程序服务并管理对它们的访问的方法,这一点也很重要。实际上,Ingress是一个逻辑资源元素,它通过Ingress Controller描述了一组用于流量管理的规则。因此,Ingress控制器可以通过提供L7网络功能来发挥API网关的作用,这些功能包括:负载平衡,SSL终止和用于嵌套应用程序服务的HTTP / HTTPS流量路由。您可能会考虑查看最受欢迎的解决方案:NGINX Ingress ControllerTraefikIstio等。

答案 3 :(得分:0)

Nginx可以为您的静态网页(Web应用程序)提供服务,但不能连接数据库。 Nginx可以作为代理,例如作为Web应用程序/字体结尾的入口控制器。字体端和后端将使用类型ClusterIP的服务进行通信的不同Pod。 Fontend服务将是Nodeport服务。