2

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

Nginx

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

Kubernetes

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

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

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

4

3 回答 3

2

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

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

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

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

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

于 2021-05-13T01:28:17.040 回答
2

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

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

负载均衡器/网关/Nginx

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

Kubernetes API / 控制平面

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

于 2021-05-13T07:20:12.847 回答
1

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

基本上,Kubernetes 通过 Ingress 提供内置的 HTTP 负载平衡,Ingress是 API 对象,描述了向 Kubernetes 集群外部公开服务所需的状态(有关 Ingress 的更多信息,请查看this_Link )。

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

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

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

于 2021-05-13T01:38:17.260 回答