Kubernetes 的四个网络挑战

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等数据库生态工具。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python笔记——linux/ubuntu下安装mamba,安装bob.learn库

Python笔记——linux/ubuntu下安装mamba,安装bob.learn库 一、安装/卸载anaconda二、安装mamba1. 命令行安装(大坑,不推荐)2. 命令行下载guihub上的安装包并安装(推荐)3. 网站下载安装包并安装(…

STM32创建工程步骤

以创建led工程为例: 新建一个led文件夹 新建一个以led命名的工程(用keil_uVision5)并添加三个组。 Library文件夹里放置库函数文件。 User: 点亮led灯的程序; 直接给寄存器赋值 调用库函数。 #include "stm…

VSCode 连接不上 debian 的问题

之前一台笔记本上安装了 debian12,当时用 vscode 是可以连接上的,但今天连接突然就失败了,失败信息是这样的: 查看失败信息 因为 debian 是自动获取 ip 地址的,以前能连接上时,ip 地址是 104,然…

bin.zip和bin.tar.gz以及src.zip和src.tar.gz以及rpm和dmg的区别

下载JDK时Java Downloads | Oracle会有很多文件,时间长了容易混淆,在此记录一下。 如上面三张图所示: bin代表二进制文件,是编译后的文件,而src是源码。.tar.gz是linux的压缩包,.zip是windows的压缩包 所以: bin.ta…

分页存储管理、分段存储管理、段页式存储管理、两级页表

目录: 分页存储管理 基本地址存储机构 具有快表的地址存储机构 两级页表 分段存储管理 段页式管理方式 分页存储管理(重点) 首先回顾,逻辑地址和物理地址. 为什么要引入分页存储管理? 把物理地址下,离散的各个小片都利用起来,也就是在逻辑地址中看似是连续存储的,实际上对应…

halcon快速傅里叶变换

说明 低频特征是灰度变化不明显,例如图像整体轮廓,高频特征是图像灰度变化剧烈,如图像边缘和噪声。一个重要的经验结论:低频代表图像整体轮廓,高频代表了图像噪声,中频代表图像边缘、纹理等细节。 傅里叶变…

Ps:色彩范围

Ps菜单:选择/色彩范围 Select/Color Range 色彩范围 Color Range是一个功能强大选择命令,不仅可以基于颜色进行选择,而且可以基于影调进行选择。不仅可以用来检测人脸选择肤色,也可用来选择超出印刷色域范围的区域。 在图层蒙版的…

Apex的addError()显示的消息中实现换行

直接用‘<br/>’是无效的&#xff0c;因为addError默认不转义HTML符号&#xff0c;如果需要转义&#xff0c;应该将第二个参数escape设置为false。不过即使设置了也只对classic页面生效&#xff0c;lightning页面还是无法转义。 官方文档&#xff1a; 参考资料&#xf…

稀土/铜催化剂电催化CO2制C2+或CH4

在电化学CO2还原反应&#xff08;CO2RR&#xff09;中&#xff0c;合理调控反应途径以生成所需产物是最重要的挑战之一。基于此&#xff0c;中国科学院化学研究所韩布兴院士和朱庆宫研究员等人报道了一系列稀土-铜混合相催化剂&#xff0c;通过调整催化剂的组成和结构&#xff…

Linux环境变量

Linux环境变量 &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容讲解了环境变量&#xff0c;什么是环境变…

OpenCV检测圆(Python版本)

文章目录 示例代码示例结果调参 示例代码 import cv2 import numpy as np# 加载图像 image_path DistanceComparison/test_image/1.png image cv2.imread(image_path, cv2.IMREAD_COLOR)# 将图像转换为灰度 gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用高斯模糊消除…

Python采集数据代码示例

python import requests from bs4 import BeautifulSoup # 设置信息 proxy_host proxy_port proxy_url fhttp://{proxy_host}:{proxy_port} proxy {http: proxy_url, https: proxy_url} # 设置要爬取的网页链接 url # 使用requests发送GET请求&#xff0c;并设置代理…

[C/C++]数据结构 链表OJ题:移除链表元素

题目描述: 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 方法一: 从头开始遍历链表,当遇到相同元素则跳过该元素,指向下一节点 struct ListNode* removeElements(struct ListNode* head…

element tab组件,是否阻止切换

需求&#xff1a; 在tab切换之前判断当前页面是否有选择商品&#xff0c;如果有则在切换前提示用户保存 代码&#xff1a; <el-tabs v-model"tabActive" type"card" closable :before-leave"tabBefore" tab-remove"tabRemove">…

详解MES系统在质检管理中的多角度应用

MES系统的质检管理是指在制造过程中&#xff0c;利用MES系统的功能和工具来规划、执行和监控质检活动&#xff0c;以确保产品的质量符合预期标准和客户要求的管理过程。 1. 质检计划和标准制定&#xff1a; MES系统可以帮助企业制定质检计划&#xff0c;并定义质量标准和要求…

淘宝API商品详情接口丨关键词搜索接口丨用户评论接口丨淘宝销量接口

淘宝API商品详情接口&#xff0c;关键词搜索接口&#xff0c;用户评论接口&#xff0c;淘宝销量接口如下&#xff1a; 淘宝/天猫获得淘宝商品详情 API 返回值说明 item_get-获得淘宝商品详情 1.公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在…

Python 海龟绘图基础教学教案(十六)

Python 海龟绘图——第 32 题 题目&#xff1a;绘制下面的图形 解析&#xff1a; 循环绘制长方形里面一个小正方形 答案&#xff1a; import turtle as t for i in range(0,2): t.fd(140) t.lt(90) t.fd(80) t.lt(90) t.pu() t.fd(50) t.lt(90) t.fd(20) t.pd()for i…

Chatgpt人工智能对话源码系统分享 带完整搭建教程

ChatGPT的开发基于大规模预训练模型技术。预训练模型是一种在大量文本数据上进行训练的模型&#xff0c;可以学习到各种语言模式和知识。在ChatGPT中&#xff0c;预训练模型被用于学习如何生成文本&#xff0c;并且可以用于各种不同的任务&#xff0c;如对话生成、问答、摘要等…

不一样的编程方式 —— 协程(设计原理与汇编实现)

主要通过以下9个方面来了解协程的原理&#xff1a; 目录 1、为什么使用协程 1.3、协程的适用场景 2、协程的原语操作 3、协程的切换 3.1、汇编实现 4.协程的运行流程 5.协程的结构体定义(我们其实可以参照线程或者进程的状态来设计) 5.1、多状态集合设计 6.协程的调度…

正点原子嵌入式linux驱动开发——Linux 网络设备驱动

网络驱动是linux里面驱动三巨头之一&#xff0c;linux下的网络功能非常强大&#xff0c;嵌入式linux中也常常用到网络功能。前面已经讲过了字符设备驱动和块设备驱动&#xff0c;本章就来学习一下linux里面的网络设备驱动。 嵌入式网络简介 嵌入式下的网络硬件接口 本次笔记…