微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将负载均衡器与 Kubernetes 结合使用 NginxKubernetes

如何解决将负载均衡器与 Kubernetes 结合使用 NginxKubernetes

我正在学习高度可用的分布式系统,并且不断出现的一些概念是负载平衡 (Nginx) 和容器编排 (Kubernetes)。现在我对它们的简化理解是这样的:

Nginx

  • 处理 Http 请求的 Web 服务器
  • 通过反向代理对其他服务器执行负载平衡(通常以循环方式完成)
  • 将单个 IP(Nginx 服务器的 IP)映射到多个 IP(我们正在负载平衡的节点)。

Kubernetes

  • 保持容器集群定义状态的容器编排工具。
  • 将单个 IP(控制平面的 IP?)映射到多个 IP(在其上运行容器实例的节点)。

所以我的问题是,我们是否同时使用这两种工具?好像有些重叠?

例如,如果我要创建一个 NodeJS 应用程序来充当暴露 REST API 的微服务,我是否只需将我的应用程序部署在 Docker 容器中,然后让 Kubernetes 管理它?我的 Kubernetes 集群前不需要像 Nginx 这样的负载均衡器吗?

解决方法

所以我的问题是,我们是否同时使用这两种工具?好像有些重叠?

您似乎混淆了几个概念。不要过多关注 IP 地址的数量,而应更多关注不同组件的作用

负载均衡器/网关/Nginx

您可能需要某种形式的具有静态已知 IP 地址(和 DNS 名称)的网关或反向代理,以便来自 Internet 的流量可以找到到您在集群中的服务的路径。使用 Kubernetes 时,您的服务通常在本地网络中运行,但网关或反向代理通常是进入集群的途径。

Kubernetes API / 控制平面

这是一个用于管理 Kubernetes 资源的 API,例如部署新版本的应用程序。此 API 仅用于管理/管理。您的客户流量不使用此 API。您想为此使用强身份验证,仅供您和您的团队使用。您集群中的 Pod可以使用此 API,但它们需要一个服务帐户和适当的 RBAC Authorization

,

Kubernetes 为您提供了一个自包含/沙盒环境,您的服务在该环境中不受外部世界的影响,运行在私有不可路由的子网上。由于 Pod 是短暂的,因此它们的 IP 可以随时更改。因此,Kubernetes 有一个“服务”的概念。不同的微服务使用 servicename:port 进行交互,这样它们就不必担心 POD IP。

但是,如果您想从外部(互联网)访问您的应用程序,您需要配置一个入口控制器。这个入口控制器可以使用 Nginx 来实现。

因此,您的入口控制器 (nginx) 将接收请求并将其发送到服务,该服务可以将其负载均衡到 Pod 以满足所需的状态。

在大型系统中,nginx 入口控制器可能也需要扩展以服务传入的请求。

所以,长话短说,如果您想扩展和用于路由目的,您将需要两者。

,

对您的问题的简短回答是肯定的,您需要在 Kubernetes 集群前安装一个负载均衡器,以便将外部流量路由到集群中应用程序的服务,否则您的应用程序将无法从外部访问。

基本上,Kubernetes 使用 Ingress 提供内置的 HTTP 负载平衡,Ingress 是一个 API 对象,用于描述将服务暴露给 Kubernetes 集群外部的所需状态(查看此 this_Link有关 Ingress 的更多信息)。

简单地说,Kubernetes 本身就能够处理应用程序的整个状态 包括负载平衡。

针对高级微服务架构,Nginx 为 Kubernetes 负载平衡开发了一个 Ingress Controller 扩展,它在 Ingress K8s API 中展示了 Nginx 功能。

有关用于 Kubernetes Ingress 的 Nginx 和 Nginx Plus 的更多信息,请查看以下链接:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?