创建和管理强大的 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 层路由协议。但一个好的解决方案不一定很复杂!
“带我进入集群”中概述的解决方案实际上有四个组成部分:
该图说明了解决方案架构,指示解决方案组件使用哪些协议进行通信,而不是请求处理期间交换数据的顺序。
免费下载白皮书
通过共同实施具有明确定义的组件的解决方案,网络和应用程序团队可以轻松提供最佳的性能和可靠性。
我们的解决方案使用现代网络工具、协议和现有架构。由于它的设计成本低廉且易于实施、管理和支持,因此它增加了易用性并在团队之间架起了桥梁。
查看正在运行的代码并逐步了解如何操作要部署我们的解决方案,请免费下载 Get Me to the Cluster。
发表回复