当我浏览Docker / Kubernetes教程时,我注意到很多人将nginx放入pod中。
即使在阅读了关于nginx的内容之后,我也不确定他们是在使用它。不是Kubernetes为您的应用程序提供服务并处理负载平衡和诸如此类的事情吗?
Node.js不是一个可以“提供静态资产,进行缓存和TLS / SSL”的“Web服务器”吗?
因此,使用Kubernetes上的Node.js应用程序,您可以提供应用程序,静态资产,特别是Redis等缓存,负载平衡等等,为什么nginx?
答案 0 :(得分:4)
Kubernetes负责平衡对您应用的请求。现在,您是否要直接公开您的应用程序,或者想要在其前面使用WebServer,这取决于您。
将Nginx放在它前面可以让你有访问日志,错误日志,缓存,提供静态文件等等...有些情况下你可能希望直接暴露你的应用程序(这通常是这种情况)当你在GoLang中构建应用程序时
所以Nginx不是一个必须在pod中,但它取决于你的架构设计是否你想要它
答案 1 :(得分:2)
人们在Pod中运行Nginx实例可能有几个原因。最常见的用例是提供静态资产。为此,Apache或lighttpd也将扮演同样的角色。在没有看到教程的情况下,我无法阐明Nginx扮演的角色。
既然你提到过"教程",我怀疑它只是为了提供一个静态页面来说"嘿,我在这里!您已成功部署了可行的内容。"。
回答关于k8s处理负载平衡的问题 - 它确实如此。 Service对象在关联的pod之间执行Layer-3(即IP层)负载平衡,而Ingress对象在Layer-7(例如HTTP)上执行相同的操作。这种负载平衡是在集群范围内进行的。
总而言之,教程中的Nginx可能只是为了提供静态资产,而k8s是集群范围内的负载均衡。
答案 2 :(得分:1)
nginx是像apache http server或tomcat web server这样的webserver。 nginx docker图像与其他Web服务器相比尺寸较小。下载和启动Web服务器所需的时间更短。这就是为什么每个人都在容器的学习阶段使用它。
Kubernetes用于管理容器化的应用程序,如(nginx,mysql和tomcat等)。
答案 3 :(得分:0)
nginx将为您提供nginx.conf,您可以在其中添加其他设置和规则,例如速率限制,身份验证等,这些都在您的控制范围内。您可以使用aws和东西来实现它们,但是更好地控制有时会更好