博客 | NGINX

用于 Kubernetes 负载平衡的 NGINX 和 NGINX Plus Ingress 控制器

NGINX-F5-horiz-black-type-RGB 的一部分
Michael Pleshakov 缩略图
米歇尔·普列沙科夫
2016 年 12 月 5 日发布

在一组机器上大规模运行和管理容器中的微服务应用是一项具有挑战性的任务。 Kubernetes通过为您提供强大的容器编排解决方案来帮助您应对挑战。 它包括几个重要功能,例如容错、自动扩展、滚动更新、存储、服务发现和负载均衡。

在这篇博文中,我们将解释如何将NGINX Open SourceNGINX PlusIngress (用于 HTTP 流量的内置 Kubernetes 负载均衡框架)结合使用。 Ingress 使您能够配置规则来控制外部流量到 Kubernetes 集群中的服务的路由。 您可以选择任何提供Ingress 控制器的负载均衡器,它是您在集群中部署的软件,用于集成 Kubernetes 和负载均衡器。 在这里,我们向您展示如何使用 Ingress 以及我们为 NGINX Plus 和 NGINX 提供的 Ingress 控制器为微服务应用配置负载均衡。

[编辑 – 之前 NGINX 和 NGINX Plus 的独立控制器已合并为一个Ingress 控制器。]

在这篇博文中,我们仅研究使用 Ingress 的 Kubernetes 的 HTTP 负载均衡。 要了解有关其他负载均衡选项的更多信息,请参阅我们博客上的使用 NGINX Plus 负载均衡 Kubernetes 服务

笔记: 本博文中讨论的程序的完整说明可在我们的GitHub 存储库中找到。 这篇文章并未介绍每一个必要的步骤,而是提供了这些说明的链接。

NGINX 和 NGINX Plus 的入口控制器

在我们部署示例应用并为其配置负载均衡之前,我们必须选择一个负载均衡器并部署相应的 Ingress 控制器。

Ingress 控制器是一种将特定负载均衡器与 Kubernetes 集成的软件。 我们为 NGINX Open Source 和 NGINX Plus 开发了 Ingress 控制器,现在可以在我们的GitHub 存储库上使用。 还有由第三方创建的其他实现;要了解更多信息,请访问 Kubernetes GitHub 存储库中的Ingress Controllers页面。

有关在集群中部署 NGINX 或 NGINX Plus Ingress 控制器的完整说明,请参阅我们的GitHub 存储库

示例微服务application

我们的示例应用是一个典型的微服务Web应用,由多个服务组成,每个服务都单独部署。 该应用名为cafe ,它可让您通过服务订购茶或通过咖啡服务订购咖啡。 您可以使用 HTTP 请求的 URI 来表明您的饮品偏好: 以/tea结尾的 URI 可为您提供茶,以/coffee结尾的 URI 可为您提供咖啡。 与应用的连接必须使用 SSL/TLS 进行保护。

下图概念性地描述了该应用,其中 NGINX Plus 负载均衡器发挥着将客户端请求路由到适当服务以及使用 SSL/TLS 保护客户端连接的重要作用。

NGINX 和 NGINX Plus Ingress 控制器提供的示例“咖啡馆”微服务应用说明了 Kubernetes 负载均衡

要在您的集群中部署应用,请按照我们的GitHub 存储库上的说明进行操作。

通过 Ingress 配置 Kubernetes 负载均衡

我们的咖啡馆应用程序需要负载均衡器提供两种功能:

  • 根据请求 URI 进行路由(也称为基于路径的路由
  • SSL/TLS 终止

要使用 Ingress 配置负载均衡,您可以在Ingress 资源中定义规则。 规则指定如何将外部流量路由到集群中的服务。

在资源中您可以定义多个虚拟服务器,每个虚拟服务器对应不同的域名。 虚拟服务器通常对应集群中部署的单个微服务应用。 对于每个服务器,您可以:

  • 指定多个基于路径的规则。 流量根据请求 URI 发送到应用中的不同服务。
  • 通过引用 SSL/TLS 证书和密钥来设置 SSL/TLS 终止。

您可以在Ingress 文档页面上找到有关 Ingress 的更详细说明及示例。

以下是cafe应用的 Ingress 资源 ( cafe‑ingress.yaml ):

 

逐行检查,我们发现:

  • 在第 4 行中,我们将资源命名为cafe‑ingress
  • 在第 6-9 行中,我们设置了 SSL/TLS 终止:

    • 在第 9 行中,我们通过名称cafe‑secret引用了Secret资源。 该资源包含SSL/TLS 证书和密钥,必须在 Ingress 资源之前部署。
    • 在第 8 行中,我们将证书和密钥应用到我们的cafe.example.com虚拟服务器。
  • 在第 11 行,我们定义了一个域名为cafe.example.com 的虚拟服务器。
  • 在第 13-21 行中,我们定义了两个基于路径的规则:

    • 第 14-17 行定义的规则指示负载均衡器在tea服务的容器之间分配带有/tea URI 的请求,该服务在集群中使用名称tea-svc部署。
    • 第 18-21 行定义的规则指示负载均衡器在coffee服务的容器之间分配 URI 为/coffee 的请求,该服务在集群中以名称coffee-svc部署。
    • 两条规则都指示负载均衡器将请求分发到相应服务的80 端口

有关在集群中部署 Ingress 和 Secret 资源的完整说明,请参阅我们的GitHub 存储库

测试application

一旦我们部署了 NGINX Plus Ingress 控制器、我们的应用、Ingress 资源和 Secret 资源,我们就可以测试该应用程序。

当我们使用/tea URI 发出茶请求时,我们会在浏览器中看到由服务生成的页面。

NGINX 和 NGINX Plus Ingress 控制器为 Kubernetes 负载均衡提供的示例“tea”微服务返回包含请求详细信息的索引页

我们希望您不会太失望,因为茶和咖啡服务实际上并没有给您提供饮料,而是提供有关他们所用容器的信息和您的请求的详细信息。 其中包括容器主机名和 IP 地址、请求 URI 和客户端 IP 地址。 每次刷新页面时,我们都会从不同的容器中获得响应。

我们还可以连接到 NGINX Plus实时活动监控仪表板,并查看来自 NGINX Plus 和我们应用的每个容器的实时负载均衡指标。

NGINX Plus 实时活动监控仪表板显示了 NGINX Plus 示例“咖啡馆”应用中微服务之间的负载均衡请求,该应用程序随 NGINX 和 NGINX Plus Ingress 控制器一起提供,用于 Kubernetes 负载均衡

入口控制器扩展

Ingress 提供基本的 HTTP 负载均衡功能。 然而,通常情况下,应用的负载均衡要求更加复杂,因此 Ingress 不支持。 为了满足其中一些要求,我们为 Ingress 控制器添加了许多扩展。 这样,您仍然可以利用 Kubernetes 资源来配置负载均衡(而不是直接配置负载均衡器),但可以利用高级负载均衡功能。

有关可用扩展的完整列表,请参阅我们的GitHub 存储库

此外,我们还提供一种机制,通过 Config Maps 资源或 Annotations,利用 Kubernetes 资源定制 NGINX 配置。 例如,您可以自定义proxy_connect_timeoutproxy_read_timeout指令的值。

当您的负载平衡要求超出 Ingress 和我们的扩展所支持的要求时,我们建议采用不使用 Ingress 控制器的其他方法来部署和配置 NGINX Plus。 阅读我们博客上的使用 NGINX Plus 实现 Kubernetes 服务负载平衡以了解更多信息。

NGINX Plus 与控制器的优势

借助 NGINX Plus,Ingress 控制器除了提供 NGINX 带来的好处之外,还提供以下好处:

  • 高度动态环境中的稳定性——每次通过 Ingress 公开的服务 pod 数量发生变化时,Ingress 控制器都需要更新 NGINX 或 NGINX Plus 配置以反映这些变化。 使用 NGINX Open Source,您必须手动更改配置文件并重新加载配置。 使用 NGINX Plus,您可以使用动态重新配置API 来更新配置,而无需重新加载配置文件。 这可以防止配置重新加载非常频繁时可能发生的内存使用量增加和整个系统过载。
  • 实时统计数据- NGINX Plus 提供高级实时统计数据,您可以通过 API 或内置仪表板访问。 这可以让您深入了解 NGINX Plus 和您的应用的运行情况。
  • 会话持久性- 当您启用会话持久性时,NGINX Plus 会确保来自同一客户端的所有请求始终使用粘性 cookie方法传递到同一个后端容器。

概括

Kubernetes 提供内置的 HTTP 负载均衡,通过 Ingress 将外部流量路由到集群中的服务。 NGINX 和 NGINX Plus 与 Kubernetes 负载均衡集成,完全支持 Ingress 功能,并提供扩展以支持扩展的负载均衡要求。

要试用 NGINX Plus 和 Ingress 控制器,请立即开始30 天免费试用联系我们讨论您的用例


“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”