在 Kubernetes 中使用负载均衡器

Using a Load Balancer with Kubernetes

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

Nginx

Kubernetes

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

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

Kubernetes 为您提供了一个 self-contained/sandboxed 环境,您的服务在私有不可路由子网上 运行 不受外界影响。因为 pods 是临时的,他们的 IP 可以随时更改。因此,Kubernetes 有一个“服务”的概念。不同的微服务使用 servicename:port 相互交互,因此它们不必担心 POD IP。

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

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

在大型系统中,nginx 入口控制器可能还需要扩展才能为传入请求提供服务。

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

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

基本上,Kubernetes 通过 Ingress 提供内置 HTTP 负载平衡,它是 API 对象,描述了将服务暴露到 Kubernetes 集群外部所需的状态(检查此 this_Link 以获取有关 Ingress 的更多信息)。

简而言之,Kubernetes 本身就能够处理您应用程序的整个状态 包括负载平衡。

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

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

So my question is, do we use both of these tools in conjunction? It seems like there is some overlap?

你好像混淆了几个概念。不要太在意 IP 地址的数量,而是更多地关注不同组件的作用

负载均衡器/网关/Nginx

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

Kubernetes API / 控制平面

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