Kubernetes 的四个网络挑战

news2025/1/8 12:30:32

Kubernetes 的主要职责之一是在应用程序之间共享节点。由于这些应用程序需要相互通信并与外部世界通信,因此网络是一个基本的需求。

图片

Kubernetes 托管的分布式应用程序架构

来自 Kubernetes 集群外部的请求通常通过负责将它们代理到适当服务的路由器或 API 网关进行。Kubernetes 网络的责任是提供底层通信层,使请求能够到达它们预期的目的地。

分布式应用程序分布在许多节点上。当每个应用程序有多个副本时,Kubernetes 处理服务发现和服务与 Pod 之间的通信。在 Pod 内部,容器可以轻松且透明地通信。在集群内部,Pod 可以连接到其他 Pod,这是通过虚拟网络接口、桥接以及通过叠加网络的路由规则的组合实现的。

尽管有透明的处理,但 Kubernetes 网络比看起来更复杂。在多个云上部署、维护多个环境以及确保可靠且可扩展的网络策略都是重大的挑战。并不是所有这些复杂性都被 Kubernetes 原生地解决了。在本文中,我们将探讨如何应对这些挑战。

Kubernetes 网络的基础 

在 Kubernetes 中,Pod 负责处理容器到容器的通信。Pod 利用具有自己的网络资源(接口和路由表)的网络命名空间。在 Pod 内部,容器共享这些资源,允许它们通过 localhost 进行通信。

Pod 到 Pod 的通信必须满足以下 Kubernetes 的要求:

  • Pod 需要无网络地址转换 (NAT) 的通信。

  • 节点需要能够无 NAT 的与 Pod 通信。

  • Pod 可以看到分配给自己的 IP 地址必须与其他 Pod 看到的 IP 匹配。

Container Network Interface (CNI) 包括编写网络插件以配置网络接口的规范。这使您可以创建满足 Pod 到 Pod 通信要求的覆盖网络。

服务是 Kubernetes 的一个抽象,允许 Pod 暴露和接收请求。它通过 Pod 标签提供服务发现机制和基本的负载均衡能力。在 Pod 内部运行的应用程序可以轻松地使用服务连接到集群中运行的其他应用程序。来自集群外部的请求可以通过 Ingress 控制器路由。这些控制器将使用 Ingress 资源配置路由规则,通常利用服务来促进路由到正确的应用程序。

重大挑战 

尽管这些网络功能为 Kubernetes 管理的工作负载提供了基础的构建块,但云原生系统的动态和复杂性带来了几个挑战。

服务到服务通信的可靠性 

在分布式系统中,业务功能被划分为多个自主服务,在节点、Pod 和容器的集群上运行。微服务架构引入了服务需要通过网络进行通信的需求。

云的不稳定性和弹性特性要求对 Kubernetes 集群进行持续监控,并在出现故障时进行重新路由。由于 Pod 是短暂的并且资源持续地被重新路由,所以服务到服务的通信并不是既定的。

高效的负载均衡算法需要将流量分配给可用的副本并隔离过载的副本。同样,服务失败意味着客户端请求需要被重试并优雅地超时。复杂的场景可能需要断路器和负载减轻技术来处理需求的激增和失败。

复杂的多云部署 

复杂的大规模系统通常被划分为多个环境,不同的部分部署到不同的云平台。这些异构环境需要相互通信。

甚至在同一个云租户内——或在本地——相同的工作负载可以在不同的环境中运行(开发、暂存和生产)。尽管这些环境是分开的,但它们有时需要相互通信。例如,暂存环境可能需要模拟生产工作负载,并在上线前对应用程序进行严格测试。通过成功的测试,代码和数据可能需要从中迁移。

在这种情况下,无缝迁移可能是一个挑战。此外,可能存在同时支持 VM 和 Kubernetes 托管服务的团队的情况。或者,团队设计支持多云——或至少是多区域——部署以确保可靠性的系统,指定复杂的网络配置和详细的入口和出口规则。

服务发现 

在云原生环境中运行 Kubernetes 时,通过在多个节点上生成多个副本来轻松扩展服务是很容易的。这些应用程序副本是短暂的——按 Kubernetes 的需要实例化和销毁。应用程序中的微服务非常不容易跟踪所有这些 IP 地址和端口的更改。尽管如此,这些微服务需要一个有效的方法来查找服务副本。

网络规则的可扩展性 

安全性最佳实践和行业法规,如支付卡行业数据安全标准 (PCI DSS),都强制执行严格的网络规则。这些规则规定了服务之间的严格通信约束。

Kubernetes 有 Network Policies 的概念。这些允许您在 IP 地址或端口级别控制流量。您可以使用标签和选择器指定允许 Pod 与其他服务通信的规则。

随着您的微服务系统在数量上增长,达到数百或数千个服务,网络策略管理变得复杂、繁琐且容易出错。

Kong Ingress 控制器如何帮助 

来自 Kong 的 Kubernetes Ingress 控制器 (KIC) 是 Kubernetes 的一个 Ingress 实现。这个由 Kong Gateway 提供支持的 Ingress 控制器,充当一个云原生、平台无关、可扩展的 API 网关。它是为混合和多云环境而构建的,并且针对微服务和分布式架构进行了优化。

KIC 允许创建路由规则、健康检查和负载均衡的配置,并且支持多种提供高级功能的插件。这一广泛的功能可以帮助解决我们已经讨论的挑战。

可靠的服务到服务通信 

Kubernetes 服务提供了简单的负载均衡功能(轮询调度)。KIC 的一个核心功能是在同一应用程序的副本之间进行负载均衡。它可以使用诸如加权连接或最少连接的算法,或者甚至是复杂的、自定义的实现。这些算法利用 KIC 的服务注册表提供高效的路由。

使用 KIC,您可以轻松地在服务停止时配置重试、合理的超时、将请求重新路由到健康的服务实例或错误处理。您还可以实现诸如断路器和负载减轻等失败模式,以平滑和节流流量。

简化多云环境部署 

多环境和异构基础设施部署需要复杂的网络策略和路由配置。内置在 KIC 中的 Kong Gateway 解决了其中许多挑战。

Kong Gateway 允许服务独立于部署位置进行注册。使用已注册的服务,您将能够添加路由,KIC 将准备好代理请求到您的服务。此外,当复杂的系统有时使用不同的协议(REST 与 gRPC)进行通信时,您可以轻松地配置 KIC 以支持多个协议。

插件系统允许您扩展 KIC 的功能以满足更复杂的场景。Kong Plugin Hub 包含了一系列有用且经过实战测试的插件,而 KIC 也使您能够开发和使用最适合您需求的任何插件。

增强的服务发现 

如前所述,KIC 通过其服务注册表跟踪可用实例。随着服务与 KIC 的集成,它们可以自我注册并报告其可用性。此注册也可以通过第三方注册服务完成。通过利用服务注册表,KIC 可以在任何时候将客户端请求代理到适当的后端。

可扩展的网络规则 

尽管通过 Network Policies 强制执行网络规则可能会很复杂,但 KIC 可以轻松地与诸如 CNCF 的 Kuma 或与 Kong Istio Gateway 的 Istio 这样的服务网格实现集成,扩展 Network Policies 的功能并保证额外的安全性。

使用身份验证和授权策略,您将能够以安全、一致且自动化的方式增强网络安全。此外,您可以将网络策略和服务网格策略一起使用,以提供更好的安全姿态。

服务网格集成的另一个好处是它允许进行像金丝雀部署和蓝绿部署这样的部署模式。它还通过可靠的指标和追踪增强了可观察性。

结论 

Kubernetes 可以处理常见的网络任务,使开发人员和操作员更容易启动服务。然而,在大型和复杂的云原生系统中,网络问题很少是简单的。组织希望将单体划分为微服务,但他们需要解决如有效的负载均衡或容错等独特的问题。同样,实现不同环境之间的无缝服务迁移和转换并不容易。Kubernetes 的网络功能需要扩展以支持更广泛的场景。

KIC 可以有效地应对其中许多挑战。它提供了广泛的功能,包括高级的路由和负载均衡规则、复杂的入口和出口规则,以及容错措施。您可以使用 KIC 的服务注册表大大改进服务发现,该注册表可以跟踪每个服务的所有可用实例。与 KIC 和服务网格的简单集成可以帮助建立强大的网络安全策略,并利用不同的部署模式。


作者:Michael Bogan

更多内容请关注公号【云原生数据库

squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1176120.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mac安装python3

文章目录 1. 安装1.1 brew安装(失败)2. 下载安装包 2. 查看版本3. 配置 1. 安装 1.1 brew安装(失败) brew install python3下载完成后报错:Error: python3.10: unknown or unsupported macOS version: :dunno 解决&a…

边缘计算助力低速无人驾驶驶入多场景落地快车道

自动驾驶刮起的风,如今正吹向低速无人驾驶赛道。近期不完全统计显示,当前A股及港股正在排队IPO的自动驾驶相关企业共有12家,其中实现盈利的企业仅两家,而且实现盈利的两家企业最主要的收入并不完全源于自动驾驶领域。 相比之下&am…

微信小程序webview中嵌套uniapp时的文件下载问题

文章目录 背景解决方案一、思路二、引入依赖三、H5端代码四、微信小程序端代码 效果图参考 前往闪闪の小窝以获得更好的阅读和评论体验 背景 这个标题就已经够抽象了吧 本来用微信小程序的web-view去嵌套h5已经因为微信的种种限制(微信不希望你把微信小程序当做一…

五、计算机网络

(一)OSI/RM 七层模型 七层模型是计算机网络的基石,整个计算机网络是构建与七层模型之上的。 在数据链路层,数据开始以帧为单位,网卡的 MAC 地址就是数据帧的地址,数据的传输开始有地址了。 局域网是工作…

3.JMeter高级使用-让你与众不同

概述 今日目标: 插件下载与安装Basic Graphs 主要点 Average Response Time 平均响应时间Active Threads 活动线程数Successful/Failed Transactions 成功/失败 事务数 Additional Graphs 主要点 Response Codes 响应码Bytes Throughput 吞吐量Connect Times 连接…

【C++】类与对象 第三篇(初始化列表,explicit,static,友元,内部类)

再谈构造函数 构造函数体赋值 在创建对象时,编译器通过调用构造函数给对象各个成员变量一个合适的初始值 class Date{public:Date(int year, int month, int day){_year year;_month month;_day day;}​private:int _year;int _month;int _day;}; 虽然上述…

成语猜猜猜小程序源码系统 自带流量主功能帮你赚钱,带完整搭建教程

今天来给大家介绍一款成语猜猜猜小程序源码系统 。随着小程序生态的日益繁荣,越来越多的人开始关注小程序的开发和运营。成语猜猜猜作为一种具有趣味性和知识性的游戏形式,在小程序领域中备受欢迎。因此,开发一个成语猜猜猜小程序源码系统&am…

轻松理解 Transformers (3): Feed-Forward Layer部分

编者按:随着人工智能技术的不断发展Transformer架构已经成为了当今最为热门的话题之一。前馈层作为Transformer架构中的重要组成部分,其作用和特点备受关注。本文通过浅显易懂的语言和生活中的例子,帮助读者逐步理解Transformers中的前馈层。…

信息科技风险管理:合规管理、技术防控与数字化

信息科技对金融业务发展所起的作用是举足轻重的。近年来,金融机构在战略规划中相继引入科技引领的概念。作为金融机构信息科技从业人员,我们笃信信息科技是一个非常有用的工具,一个兼具产品思维和管理思维、拥有高质增效能力的工具。 这个工…

C语言 每日一题 PTA 11.6 day10

1.调和平均 N 个正数的算数平均是这些数的和除以 N,它们的调和平均是它们倒数的算数平均的倒数。 本题就请你计算给定的一系列正数的调和平均值。 输入格式: 每个输入包含 1 个测试用例。每个测试用例第 1 行给出正整数 N(≤1000);第 2 行给…

c语言 结构体 简单实例

结构体 简单例子 要求&#xff1a; 结构体保存学生信息操作 代码 #include <stdio.h>//定义结构体 struct student{int ID;char name[20];char sex;char birthday[8];int grade; };int main(){int number;printf("请输入学生个数&#xff1a;");scanf(&quo…

SpringBoot内容协商(简单使用、源码解读、默认Converters、自定义Converters)

目录 1. 内容协商1.1 简单使用1.2 源码解读1.3 WebMvcAutoConfiguration提供几种默认HttpMessageConverters1.4 自定义HttpMessageConverter支持yaml格式输出 1. 内容协商 1.1 简单使用 一套系统适配多端数据返回 基于请求头内容协商&#xff1a;&#xff08;默认开启&#x…

学习笔记|秩相关分析|Spearman相关分析|Kendall相关分析|规范表达|《小白爱上SPSS》课程:SPSS第十九讲:秩相关分析怎么做?

目录 学习目的软件版本原始文档秩相关分析一、实战案例二、统计策略三、SPSS操作四、结果解读五、规范表达1、规范图表2、规范文字 六、划重点&#xff1a; 学习目的 SPSS第十九讲&#xff1a;秩相关分析怎么做&#xff1f; 软件版本 IBM SPSS Statistics 26。 原始文档 《…

DC电源模块隔离电路的影响

BOSHIDA DC电源模块隔离电路的影响 DC电源模块隔离电路是电子设备中常用的一种电路。它的作用是在设备中两个电路之间建立一定的隔离&#xff0c;以保证两个电路之间不会传递电流或信号。这种隔离电路的影响可以从以下几个方面来分析。 首先&#xff0c;隔离电路可以提高安全性…

人工智能:一种现代的方法 第二章 智能体

文章目录 前言人工智能&#xff1a;一种现代的方法 第二章 智能体2.1 环境与智能体2.2 理性概念2.3环境的性质2.3.1任务环境的规范描述&#xff1a;PEAS2.3.2环境的性质 2.4智能体结构 前言 本章属于本书的开篇&#xff0c;有两个不便于理解的地方一是讲述的概念过于抽象&…

再不记录就忘啦在浙工商的第一年啦!

再不记录就快忘啦在浙工商的第一年啦&#xff01; 文章目录 再不记录就快忘啦在浙工商的第一年啦&#xff01;&#x1f6a9;这是前言&#xff01;&#xff01;&#xff01;&#x1f468;‍&#x1f680;杭漂选手新生入场【2019.08-2019.10】&#x1f9d8;‍♂️开始步入适应期【…

[机缘参悟-118] :如何做到:从无到有,从0到1设计一个新系统或产品?如何做到总是能快速的解决复杂技术难题?

目录 前言&#xff1a; 一、在软件工程化理论和实践上 二、在担任过的嵌入系统的岗位角色上&#xff08;横向、广度&#xff09; 三、在嵌入式设备的功能分层上&#xff08;纵向、深度&#xff09; 四、在嵌入式通信产品/设备类型上 五、在软硬件产品的项目管理上 六、在…

ActiveMq学习⑨__基于zookeeper和LevelDB搭建ActiveMQ集群

引入消息中间件后如何保证其高可用&#xff1f; 基于zookeeper和LevelDB搭建ActiveMQ集群。集群仅提供主备方式的高可用集群功能&#xff0c;避免单点故障。 http://activemq.apache.org/masterslave LevelDB&#xff0c;5.6版本之后推出了LecelDB的持久化引擎&#xff0c;它使…

css-inpu边框

效果图&#xff1a; input {width: 225px;height: 25px;background-color: #1469bd00;border: #aca9a97d solid 1px;color: white;font-size: 15pt;box-sizing: conte-box; }input:focus {border-style: solid;border-color: #03a9f4;box-shadow: 0 0 15px #03a9f4;outline: …

基于分钟级降水预报API 的智能农业水资源管理探究

前言 随着农业现代化的发展&#xff0c;越来越多的农业生产活动需要依赖于科学技术的支持。其中&#xff0c;智能农业水资源管理就是依托新型技术手段&#xff0c;实现对水资源的更加精准预报、科学调度的一种管理模式。而基于分钟级降水预报API的智能农业水资源管理&#xff…