在一组机器上大规模运行和管理容器中的微服务应用是一项具有挑战性的任务。 Kubernetes通过为您提供强大的容器编排解决方案来帮助您应对挑战。 它包括几个重要功能,例如容错、自动扩展、滚动更新、存储、服务发现和负载均衡。
在这篇博文中,我们将解释如何将NGINX Open Source或NGINX Plus与Ingress (用于 HTTP 流量的内置 Kubernetes 负载均衡框架)结合使用。 Ingress 使您能够配置规则来控制外部流量到 Kubernetes 集群中的服务的路由。 您可以选择任何提供Ingress 控制器的负载均衡器,它是您在集群中部署的软件,用于集成 Kubernetes 和负载均衡器。 在这里,我们向您展示如何使用 Ingress 以及我们为 NGINX Plus 和 NGINX 提供的 Ingress 控制器为微服务应用配置负载均衡。
[编辑 – 之前 NGINX 和 NGINX Plus 的独立控制器已合并为一个Ingress 控制器。]
在这篇博文中,我们仅研究使用 Ingress 的 Kubernetes 的 HTTP 负载均衡。 要了解有关其他负载均衡选项的更多信息,请参阅我们博客上的使用 NGINX Plus 负载均衡 Kubernetes 服务。
笔记: 本博文中讨论的程序的完整说明可在我们的GitHub 存储库中找到。 这篇文章并未介绍每一个必要的步骤,而是提供了这些说明的链接。
在我们部署示例应用并为其配置负载均衡之前,我们必须选择一个负载均衡器并部署相应的 Ingress 控制器。
Ingress 控制器是一种将特定负载均衡器与 Kubernetes 集成的软件。 我们为 NGINX Open Source 和 NGINX Plus 开发了 Ingress 控制器,现在可以在我们的GitHub 存储库上使用。 还有由第三方创建的其他实现;要了解更多信息,请访问 Kubernetes GitHub 存储库中的Ingress Controllers页面。
有关在集群中部署 NGINX 或 NGINX Plus Ingress 控制器的完整说明,请参阅我们的GitHub 存储库。
我们的示例应用是一个典型的微服务Web应用,由多个服务组成,每个服务都单独部署。 该应用名为cafe ,它可让您通过茶服务订购茶或通过咖啡服务订购咖啡。 您可以使用 HTTP 请求的 URI 来表明您的饮品偏好: 以/tea结尾的 URI 可为您提供茶,以/coffee结尾的 URI 可为您提供咖啡。 与应用的连接必须使用 SSL/TLS 进行保护。
下图概念性地描述了该应用,其中 NGINX Plus 负载均衡器发挥着将客户端请求路由到适当服务以及使用 SSL/TLS 保护客户端连接的重要作用。
要在您的集群中部署应用,请按照我们的GitHub 存储库上的说明进行操作。
我们的咖啡馆应用程序需要负载均衡器提供两种功能:
要使用 Ingress 配置负载均衡,您可以在Ingress 资源中定义规则。 规则指定如何将外部流量路由到集群中的服务。
在资源中您可以定义多个虚拟服务器,每个虚拟服务器对应不同的域名。 虚拟服务器通常对应集群中部署的单个微服务应用。 对于每个服务器,您可以:
您可以在Ingress 文档页面上找到有关 Ingress 的更详细说明及示例。
以下是cafe应用的 Ingress 资源 ( cafe‑ingress.yaml ):
逐行检查,我们发现:
在第 6-9 行中,我们设置了 SSL/TLS 终止:
在第 13-21 行中,我们定义了两个基于路径的规则:
有关在集群中部署 Ingress 和 Secret 资源的完整说明,请参阅我们的GitHub 存储库。
一旦我们部署了 NGINX Plus Ingress 控制器、我们的应用、Ingress 资源和 Secret 资源,我们就可以测试该应用程序。
当我们使用/tea URI 发出茶请求时,我们会在浏览器中看到由茶服务生成的页面。
我们希望您不会太失望,因为茶和咖啡服务实际上并没有给您提供饮料,而是提供有关他们所用容器的信息和您的请求的详细信息。 其中包括容器主机名和 IP 地址、请求 URI 和客户端 IP 地址。 每次刷新页面时,我们都会从不同的容器中获得响应。
我们还可以连接到 NGINX Plus实时活动监控仪表板,并查看来自 NGINX Plus 和我们应用的每个容器的实时负载均衡指标。
Ingress 提供基本的 HTTP 负载均衡功能。 然而,通常情况下,应用的负载均衡要求更加复杂,因此 Ingress 不支持。 为了满足其中一些要求,我们为 Ingress 控制器添加了许多扩展。 这样,您仍然可以利用 Kubernetes 资源来配置负载均衡(而不是直接配置负载均衡器),但可以利用高级负载均衡功能。
有关可用扩展的完整列表,请参阅我们的GitHub 存储库。
此外,我们还提供一种机制,通过 Config Maps 资源或 Annotations,利用 Kubernetes 资源定制 NGINX 配置。 例如,您可以自定义proxy_connect_timeout
或proxy_read_timeout
指令的值。
当您的负载平衡要求超出 Ingress 和我们的扩展所支持的要求时,我们建议采用不使用 Ingress 控制器的其他方法来部署和配置 NGINX Plus。 阅读我们博客上的使用 NGINX Plus 实现 Kubernetes 服务负载平衡以了解更多信息。
借助 NGINX Plus,Ingress 控制器除了提供 NGINX 带来的好处之外,还提供以下好处:
Kubernetes 提供内置的 HTTP 负载均衡,通过 Ingress 将外部流量路由到集群中的服务。 NGINX 和 NGINX Plus 与 Kubernetes 负载均衡集成,完全支持 Ingress 功能,并提供扩展以支持扩展的负载均衡要求。
要试用 NGINX Plus 和 Ingress 控制器,请立即开始30 天免费试用或联系我们讨论您的用例。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”