当我拥有 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 或容器配置时会发生啥?

kubernetes下的Nginx加Tomcat三部曲之二:细说开发

我对 kubernetes 部署有一些疑问[关闭]

Kubernetes Nginx Ingress 找不到服务端点