当我拥有 Kubernetes 时,nginx 的意义何在?
Posted
技术标签:
【中文标题】当我拥有 Kubernetes 时,nginx 的意义何在?【英文标题】:What is the point of nginx when I have Kubernetes? 【发布时间】:2017-12-27 19:34:50 【问题描述】:在阅读 Docker/Kubernetes 教程时,我注意到很多人将 nginx 放入 pod。
即使在阅读了有关 nginx 的文章后,我也不确定他们使用它的目的是什么。 Kubernetes 不是为您的应用程序服务并处理负载平衡之类的事情吗?
像 Node.js 这样的东西不就是一个可以“提供静态资产、进行缓存和 TLS/SSL”的“Web 服务器”吗?
因此,使用 Kubernetes 上的 Node.js 应用程序,您可以为应用程序提供服务、静态资产、缓存(尤其是 Redis 之类的东西)以及负载平衡等,为什么选择 nginx?
【问题讨论】:
【参考方案1】:Kubernetes 正在对应用程序的请求进行负载平衡。现在由您决定是直接公开您的应用还是在其前面使用 WebServer。
将 Nginx 放在它前面可以让您拥有访问日志、错误日志、缓存、提供静态文件等内容......在某些情况下,您可能希望直接公开您的应用程序(通常是这种情况当你在 GoLang 中构建应用程序时)
所以 Nginx 不是 Pod 中的必需品,但是否需要它取决于您的架构设计
【讨论】:
“把Nginx放在前面”是什么意思?是不是说前端要用Nginx? Nginx 是前面的意思不同。Internet->Nginx->KBCluster->Services
, Internet-KBCluster->Nginx->Services
【参考方案2】:
人们在 Pod 中运行 Nginx 实例可能有多种原因。最常见的用例是提供静态资产。为此,Apache 或 lighttpd 也将扮演同样的角色。没有看教程,我无法理解 Nginx 扮演什么角色。
既然你提到了“教程”,我怀疑它只是为了提供一个静态页面说“嘿,我在这里!你已经成功部署了一些有用的东西。”。
回答您关于 k8s 处理负载平衡的问题 - 确实如此。 Service 对象在关联的 Pod 之间执行第 3 层(即 IP 层)负载平衡,而 Ingress 对象在第 7 层(例如 HTTP)上执行相同的操作。这种负载平衡是基于集群范围的。
总而言之,教程中的 Nginx 很可能只是为静态资产提供服务,而 k8s 负载平衡集群范围。
【讨论】:
【参考方案3】:nginx 是类似于 apache http 服务器或 tomcat 网络服务器的网络服务器。与其他网络服务器相比,nginx docker 镜像体积较小。下载和启动网络服务器将花费更少的时间。这就是为什么每个人都在容器学习阶段使用它的原因。
Kubernetes 用于管理容器化应用程序,例如(nginx、mysql 和 tomcat 等)。
【讨论】:
【参考方案4】:nginx 将为您提供 nginx.conf ,您可以在其中添加其他设置和规则,例如速率限制、身份验证等,这些都在您的控制之下。您可以使用 aws 和其他东西来实现它们,但有时拥有更多控制权会更好
【讨论】:
以上是关于当我拥有 Kubernetes 时,nginx 的意义何在?的主要内容,如果未能解决你的问题,请参考以下文章
在 Kubernetes 上使用 Wordpress、MySQL、Nginx “建立数据库连接时出错”
11. Ingress及Ingress Controller(主nginx ingress controller)
当我们扩展 kubernetes 部署并更改其中一个 pod 或容器配置时会发生啥?