BLOG | NGINX

借助 BGP 走进集群?

NGINX-Part-of-F5-horiz-black-type-RGB
Chris Akker 缩略图
Chris Akker
Published February 28, 2023

如欲创建和管理一个强大的 Kubernetes 环境,您的网络团队和应用团队之间必须能够顺畅协作。然而,他们的工作重点和工作方式往往大径相庭,这可能会引发冲突,进而造成严重后果——应用开发速度缓慢、部署延迟乃至网络中断。

两个团队必须都朝着共同的目标努力,才能确保如今的现代应用按时交付,并具有适当的安全防护和可扩展性。但如何充分发挥每个团队的技能和专长,同时帮助他们协同工作呢?

我们的白皮书《走进集群》详细介绍了一款 Kubernetes 服务外部访问解决方案,可助力网络团队和应用团队优势互补,避免冲突。

 

如何在 Kubernetes 集群中暴露应用

该解决方案特别适合托管在本地的 Kubernetes 集群,凭借着节点(node)在裸机或传统 Linux 虚拟机 (VM) 上运行,并且标准的二层交换机和三层路由器为数据中心内的通信提供网络。它不会扩展到云托管的 Kubernetes 集群,因为云提供商不允许我们控制其数据中心内的核心网络及其托管 Kubernetes 环境中的网络。

在详细介绍我们的解决方案之前,先让我们看一下为什么在 Kubernetes 集群中暴露应用的其他标准方法不适用于本地部署:

  • Service —— 将运行相同应用的 pod 组合在一起。这非常适合内部的 pod 之间的通信,但仅在集群内部可见,因此无助于对外暴露应用。
  • NodePort —— 在集群中的每个节点上打开一个特定端口,并将流量转发到相应的应用。虽然这允许外部用户访问 service,但效果并不理想,因为配置是静态的,所以您必须使用高编号 TCP 端口(而不是众所周知的低编号端口),并与其他应用协调端口号。您也无法在不同的应用之间共享通用 TCP 端口。
  • LoadBalancer —— 使用每个节点上的 NodePort 定义来创建从外界到 Kubernetes 节点的网络路径。它非常适合云托管 Kubernetes,因为 AWS、Google Cloud Platform、Microsoft Azure 及其他大多数云提供商都支持将其作为一项易于配置的特性来使用。它非常好用,并可为 service 提供所需的公共 IP 地址和匹配的 DNS A 记录。遗憾的是,这种方法不适用于本地集群。

 

支持外部用户访问本地 Kubernetes 集群

说到这里,首先想到便是 Kubernetes Ingress 对象,它专为从集群外的用户流向集群内的 pod 的流量(南北向流量)而设计。Ingress 为集群创建了一个外部 HTTP/HTTPS 入口点,即单个 IP 地址或 DNS 名称,支持外部用户访问多个 service。这恰好能满足我们的需求!“Ingress 对象”由 Ingress controller 实现——在我们的解决方案中是基于 NGINX Plus 的企业级 F5 NGINX Ingress Controller

您可能会惊讶地发现,该解决方案的另一个关键组件是边界网关协议 (BGP),后者是一种三层路由协议。出色的解决方案不一定很复杂。

《走进集群》中概述的这款解决方案实际上包含四个组件:

  1. iBGP 网络 —— 内部 BGP (iBGP) 用于在数据中心的自治系统 (AS) 内交换路由信息,可帮助确保网络可靠性和可扩展性。在大多数数据中心中,iBGP 已就位并由网络团队提供支持。
  2. Project Calico CNI 联网 —— Project Calico 是一种开源联网解决方案,可灵活地连接本地数据中心内的环境,同时对流量进行细粒度控制。在 Kubernetes 集群中,我们使用 Project Calico 的 CNI 插件进行联网,并启用 BGP。该操作允许您控制分配给 pod 的 IP 地址池,这有助于快速识别任何联网问题。
  3. 基于 NGINX Plus 的 NGINX Ingress Controller —— 借助 NGINX Ingress Controller,您可以监控 pod 的服务端点 IP 地址,并在不中断流量处理的情况下自动重新配置上游服务列表。应用团队还能够利用 NGINX Plus 中的许多其他企业级七层 HTTP 功能,包括主动健康检查、mTLS 和基于 JWT 的身份验证。
  4. NGINX Plus 作为边缘的反向代理 —— NGINX Plus 作为 Kubernetes 集群边缘的反向代理,在数据中心的交换机和路由器与 Kubernetes 集群的内部网络之间提供了一条路径,可以替代 Kubernetes LoadBalancer 对象,并使用 Quagga 来配置 BGP。

下图展示了该解决方案架构,显示了解决方案组件用于通信的协议,而不是请求处理期间数据交换的顺序。

 

免费下载白皮书

通过共同实施一款组件定义明确的解决方案,网络和应用团队可轻松地实现最佳性能和可靠性。

我们的解决方案使用现代联网工具、协议和现有架构。由于价格经济且易于实施、管理和支持,它可以助力简化工作并将您的各个团队轻松连接起来。

如欲查看代码实例并了解解决方案部署的分步指南,请免费下载《走进集群 》白皮书


"This blog post may reference products that are no longer available and/or no longer supported. For the most current information about available F5 NGINX products and solutions, explore our NGINX product family. NGINX is now part of F5. All previous NGINX.com links will redirect to similar NGINX content on F5.com."