用于Kubernetes负载均衡的NGINX和NGINX Plus Ingress Controller

NGINX | 2016年12月05日

在由多台机器组成的集群中,使用容器大规模运行和管理微服务应用是一项颇具挑战性的任务。Kubernetes提供强大的容器编排解决方案,帮助您应对这一挑战。它包含多项重要功能,例如容错、自动扩缩容、滚动更新、存储、服务发现和负载均衡。

本篇博文介绍如何将NGINX Open Source或NGINX Plus与Ingress结合使用。Ingress是Kubernetes内置的HTTP流量负载均衡框架,可通过配置规则来控制外部流量如何路由到Kubernetes集群中的服务。您可以选择任何提供Ingress控制器的负载均衡器。Ingress控制器是部署在集群中的软件,用于集成Kubernetes与负载均衡器。本文将介绍如何使用Ingress以及我们为NGINX Plus和NGINX提供的Ingress控制器,为微服务应用配置负载均衡。

[编者注:此前分别用于NGINX和NGINX Plus的控制器现已合并为一个同时支持二者的Ingress控制器。]

本篇博文仅探讨如何使用Ingress为Kubernetes实现HTTP负载均衡。如需了解其他负载均衡选项,请参阅博客文章《使用NGINX Plus对Kubernetes服务进行负载均衡》。

注意:本博文所述操作的完整说明可在我们的GitHub存储库中查看。本博文不会逐一介绍所有必要步骤,而是提供这些说明的链接。

适用于NGINX和NGINX Plus的Ingress Controller

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

Ingress控制器是一种将特定负载均衡器与Kubernetes集成的软件。我们已为NGINX Open Source和NGINX Plus开发了Ingress控制器,现已发布在我们的GitHub代码库中。此外,还有第三方开发的其他实现;如需了解详情,请访问Kubernetes GitHub代码库中的Ingress控制器页面。

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

示例微服务应用

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

下图以概念方式展示了该应用,其中NGINX Plus负载均衡器发挥着重要作用:将客户端请求路由到相应的服务,并使用SSL/TLS保护客户端连接。

NGINX和NGINX Plus Ingress控制器随附的“cafe”微服务示例应用展示了Kubernetes负载均衡

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

通过Ingress配置Kubernetes负载均衡

我们的cafe应用要求负载均衡器提供两项功能:

  • 基于请求URI的路由(也称为“基于路径的路由”)
  • SSL/TLS终止

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

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

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

有关Ingress的更详细说明和示例,请参阅Ingress文档页面。

以下是cafe‑ingress.yaml,即cafe应用的Ingress资源:

正在加载代码示例…

逐行查看后,可以看到:

  • 在第 4 行中,我们将该资源命名为“cafe‑ingress”。
  • 在第6至9行中,我们设置SSL/TLS终止:
    • 在第9行中,我们按名称引用了一个Secret资源:cafe‑secret。此资源包含SSL/TLS证书和密钥,必须先于Ingress资源部署。
    • 在第 8 行,我们将证书和密钥应用于cafe.example.com虚拟服务器。
  • 在第 11 行中,我们定义了一个域名为cafe.example.com的虚拟服务器。
  • 在第13至21行中,我们定义了两条基于路径的规则:
    • 第14至17行定义的规则指示负载均衡器,将URI为/tea的请求分发到tea服务的各个容器。该服务在集群中以tea‑svc名称部署。
    • 第18至21行定义的规则指示负载均衡器将 URI 为/coffee的请求分发到coffee服务的各个容器。该服务在集群中部署时使用的名称为coffee‑svc。
    • 这两条规则都指示负载均衡器将请求分发到相应服务的80 端口。

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

测试应用程序

部署 NGINX Plus Ingress controller、应用、Ingress 资源和 Secret 资源后,即可测试该应用。

使用/tea URI 发出 tea 请求时,浏览器中会显示由tea服务生成的页面。

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

希望您不会因为以下情况而太失望:tea和coffee服务并不会真的提供饮品,而是会显示其运行所在容器的信息以及请求详情,包括容器主机名和IP地址、请求URI及客户端IP地址。每次刷新页面,都会收到来自不同容器的响应。

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

NGINX Plus实时活动监控仪表板显示了NGINX Plus如何在示例“cafe”应用的各个微服务之间对请求进行负载均衡。该示例应用随用于Kubernetes负载均衡的NGINX和NGINX Plus Ingress控制器一同提供。

Ingress Controller 扩展

Ingress提供基本的HTTP负载均衡功能。但应用的负载均衡要求通常更为复杂,Ingress无法提供支持。为满足其中部分要求,我们为Ingress控制器添加了多项扩展。这样,既可以继续利用Kubernetes资源配置负载均衡(而不必直接配置负载均衡器),又能使用高级负载均衡功能。

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

此外,我们还提供了一种机制,可通过ConfigMap资源或注解等Kubernetes资源来自定义NGINX配置。例如,可以自定义proxy_connect_timeout或proxy_read_timeout指令的值。

如果负载均衡需求超出Ingress及其扩展所支持的范围,建议采用另一种不使用Ingress控制器的方法来部署和配置NGINX Plus。请阅读博客文章《使用NGINX Plus对Kubernetes服务进行负载均衡》,了解详情。

NGINX Plus与控制器结合使用的优势

使用NGINX Plus时,除了NGINX提供的优势外,Ingress控制器还可提供以下优势:

  • 高度动态环境中的稳定性:每当通过 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, 2016, Tech

相关博客文章

NGINX Plus R26 正式发布
NGINX | 2022/02/15

NGINX Plus R26 正式发布

NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
NGINX | 2022/02/10

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击

gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
NGINX | 2021/09/13

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划

了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。

NGINX Plus R19 正式发布
NGINX | 2019/09/03

NGINX Plus R19 正式发布

NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。

NGINX现已正式加入F5
NGINX | 2019/05/09

NGINX现已正式加入F5

NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

使用NGINX和NGINX Plus实现高性能缓存
NGINX | 2016/08/24

使用NGINX和NGINX Plus实现高性能缓存

我将介绍NGINX在内容缓存和性能方面的工作原理,并分享一些控制NGINX内容缓存方式的技巧。