在kubernetes pod中运行nginx容器,该容器具有使用gunicorn运行的python应用程序

时间:2018-10-16 07:12:00

标签: docker nginx kubernetes gunicorn

我有一个容器,该容器使用python运行聊天机器人,暴露了运行该机器人的端口5000。现在,当我在kubernetes上部署此容器时,我有几个问题

  • 我是否需要在我的应用程序容器所在的容器中运行nginx容器 运行?如果是,我为什么需要?因为kubernetes确实加载 平衡
  • 如果我在端口80上运行Nginx容器,是否需要运行我的 应用容器也位于80或(我可以使用其他端口,例如5000)
  • 古尼康在这里扮演什么角色?

我有点困惑,因为我在网上看到的大多数示例中,每个人几乎都在他们的pod中有nginx容器以及应用程序容器

1 个答案:

答案 0 :(得分:1)

正如您提到的,Kubernetes可以处理其自身的负载平衡,因此第一个问题的答案是“否”,您不需要运行nginx,尤其是在您的应用程序所在的pod中运行。 通常,服务和Pod具有可由群集网络路由的IP,并且终止于边缘路由器的所有流量都将被丢弃。因此,在Kubernetes中存在一组规则,这些规则允许入站连接访问集群服务。我们称之为Ingress

  

一个API对象,用于管理外部访问服务中的服务   群集,通常是HTTP。

令人困惑的部分是,仅Ingress并不会做太多事情。您将必须创建一个Ingress controller,它是作为Pod部署的守护程序。它的工作是读取Ingress资源信息并进行相应处理。实际上,任何能够反向代理的系统都可以是入口控制器。您可以通过实用方法in this article阅读有关Ingress和Ingress控制器的更多信息。另外,我也不了解您的环境,因此请记住,如果您在云上,则应使用LoadBalancer类型,而在裸机环境中则应使用NodePort

关于第二个问题,您可以在所需的任何端口上运行应用程序,只需记住在所有其他配置文件中调整该端口即可。

关于端口以及如何公开服务,您应该检查文档中有关Kubernetes模型与容器模型相比如何工作的源。您可以找到具有启发性的文章here

很遗憾,我没有使用过Gunicorn的经验,所以我无法告诉您它在这里起什么作用。希望这可以帮助。