使用 BGP 让我进入集群?

创建和管理强大的 Kubernetes 环境需要网络和应用程序团队之间的顺利协作。但他们的优先事项和工作方式通常截然不同,从而导致冲突并带来潜在的严重后果——应用程序开发缓慢、部署延迟,甚至网络停机。

只有两个团队朝着共同目标努力取得成功,才能确保当今的现代应用程序按时交付,并具有适当的安全性和可扩展性。那么,您如何利用每个团队的技能和专业知识,同时帮助他们协同工作?

在我们的白皮书《Get Me to the Cluster》中,我们详细介绍了一种支持外部访问 Kubernetes 服务的解决方案,该解决方案使网络和应用程序团队能够在不发生冲突的情况下结合各自的优势。

如何公开 Kubernetes 集群中的应用

该解决方案专门适用于本地托管的 Kubernetes 集群,节点在裸机或传统设备上运行Linux 虚拟机 (VM) 以及标准第 2 层交换机和第 3 层路由器为数据中心中的通信提供网络。它不会扩展到云托管的 Kubernetes 集群,因为云提供商不允许我们控制其数据中心的核心网络,也不允许我们控制其托管 Kubernetes 环境中的网络。

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

  • 服务 – 将运行相同应用的 Pod 分组在一起。这对于内部 Pod 到 Pod 的通信非常有用,但仅在集群内部可见,因此无助于向外部公开应用程序。
  • NodePort – 在集群中的每个节点上打开特定端口,并将流量转发到相应的应用程序。虽然这允许外部用户访问该服务,但这并不理想,因为配置是静态的,您必须使用高编号的 TCP 端口(而不是众所周知的较低端口号)并与其他应用程序协调端口号。您也无法在不同应用之间共享通用 TCP 端口。
  • LoadBalancer – 使用每个节点上的 NodePort 定义创建从外部世界到 Kubernetes 节点的网络路径。它对于云托管的 Kubernetes 来说非常有用,因为 AWS、Google Cloud Platform、Microsoft Azure 和大多数其他云提供商都支持它作为一项易于配置的功能,该功能运行良好,并为服务提供所需的公共 IP 地址和匹配的 DNS A 记录。不幸的是,本地集群没有类似的产品。

启用外部用户访问本地 Kubernetes 集群

这给我们留下了 Kubernetes Ingress 对象,它是专门为来自外部用户的流量而设计的集群到集群内的 Pod(南北向流量)。 Ingress 为集群创建一个外部 HTTP/HTTPS 入口点 – 外部用户可以访问多个服务的单个 IP 地址或 DNS 名称。这正是所需要的! Ingress 对象由 Ingress 控制器实现 – 在我们的解决方案中,是基于 NGINX Plus 的企业级 F5 NGINX Ingress 控制器。

您可能会感到惊讶的是,该解决方案的另一个关键组件是边界网关协议 (BGP),它是一种第 3 层路由协议。但一个好的解决方案不一定很复杂!

“带我进入集群”中概述的解决方案实际上有四个组成部分:

  • iBGP 网络 – 内部 BGP (iBGP) 用于在数据中心的自治系统 (AS) 内交换路由信息,有助于确保网络的可靠性和可扩展性。 iBGP 已就位并得到大多数数据中心网络团队的支持。
  • Project Calico CNI 网络 – Project Calico 是一种开源网络解决方案,可灵活连接本地数据中心的环境,同时对流量进行细粒度控制。我们使用来自 Project Calico 的 CNI 插件在 Kubernetes 集群中进行网络连接,并启用 BGP。这使您可以控制为 Pod 分配的 IP 地址池,从而有助于快速识别任何网络问题。
  • 基于 NGINX Plus 的 NGINX 入口控制器 – 使用 NGINX 入口控制器,您可以监视 Pod 的服务端点 IP 地址,并自动重新配置上游服务列表,而不会中断流量处理。应用团队还可以利用 NGINX Plus 中的许多其他企业级第 7 层 HTTP 功能,包括主动运行状况检查、mTLS 和基于 JWT 的身份验证。
  • NGINX Plus 作为边缘的反向代理– NGINX Plus 作为 Kubernetes 集群边缘的反向代理,在数据中心的交换机和路由器以及 Kubernetes 集群的内部网络之间提供路径。它可以替代 Kubernetes LoadBalancer 对象,并使用 Quagga 进行 BGP。
  • 该图说明了解决方案架构,指示解决方案组件使用哪些协议进行通信,而不是请求处理期间交换数据的顺序。

    免费下载白皮书

    通过共同实施具有明确定义的组件的解决方案,网络和应用程序团队可以轻松提供最佳的性能和可靠性。

    我们的解决方案使用现代网络工具、协议和现有架构。由于它的设计成本低廉且易于实施、管理和支持,因此它增加了易用性并在团队之间架起了桥梁。

    查看正在运行的代码并逐步了解如何操作要部署我们的解决方案,请免费下载 Get Me to the Cluster。


    评论

    发表回复

    您的电子邮箱地址不会被公开。 必填项已用 * 标注