Ingress controller:Kubernetes 的瑞士军刀

news2024/11/17 23:44:27

原文作者:Brian Ehlert of F5

原文链接:Ingress controller:Kubernetes 的瑞士军刀

转载来源:NGINX 中文官网


NGINX 唯一中文官方社区 ,尽在 nginx.org.cn

许多人认为 Ingress controller(Ingress 控制器)的价值不大,但实际上它可成为您软件栈中的强大工具。

Ingress controller 可能看似只是 Kubernetes 环境中的又一技术小部件。许多人认为 Ingress controller 的价值不大,但实际上它可成为您软件栈中的强大工具。如果部署和配置得当,Ingress controller 能够从根本上简化 Kubernetes 集群的操作,同时增强安全防护并提高性能和弹性。

Ingress controller 可完全接替其他工具或解决方案提供的许多功能。因为专为 Kubernetes 而设计,所以 Ingress controller 能够更轻松地接替这些功能,不像负载均衡器API 网关应用交付控制器 (ADC) 等现有技术结构,需要重新适应奇妙的 Kubernetes 环境。Ingress controller 的多功能性使其仿若 Kubernetes 的瑞士军刀。

为何需要使用 Ingress controller?

Ingress controller 对于定义和管理 Kubernetes(比非 Kubernetes 应用更复杂的 Ingress 环境)中的入向(南北向)流量至关重要。

默认情况下,外部网络和流量无法访问在 Kubernetes Pod(和容器)中运行的应用。Kubernetes 中的 Pod 仅可彼此之间相互通信。Kubernetes 拥有一个用于 HTTP(七层)负载均衡的内置配置对象,即 Ingress。该对象定义了 Kubernetes 集群外部的实体如何连接到分配一个或多个 Kubernetes service 的 Pod。当需要提供对 Kubernetes service 的外部访问时,您可以创建一个 Ingress 资源来定义连接规则,其中包括 URI 路径、支持 service 名称及其他信息。不过,Ingress 资源本身不执行任何操作。您必须通过部署和配置 Ingress controller 应用(使用 Kubernetes API)来实施 Ingress 资源中定义的规则。

换句话说,您需要部署 Ingress controller,以利用 Kubernetes 的现有资源和对象结构。不然,您就得更费事地结合使用 Service 对象和外部设备来创建更详细的规则。无 Ingress Controller 方案无法扩展,不仅成本高昂,而且还需投入大量的工程设计时间。

Ingress controller 如何与负载均衡器协同工作(或替代负载均衡器)

Ingress controller 既可独立工作以均衡和调度流量,也可与负载均衡器协同工作,从而释放 Kubernetes 的强大潜力,提高应用性能。

请注意:所谓的“LoadBalancer”这种 service 与“专用负载均衡器”并不能等同。

Ingress controller 有时被描述为 Kubernetes 的“专用负载均衡器”。这就引出了一个问题:您是否需要同时部署负载均衡器和 Ingress controller?答案是:视情况而定。正如上一篇博文《复制,而非整合:应用发展道路》中所述,有时您需要根据工具的使用群体和部署位置进行一些功能复制。

对于许多用例,尤其是要扩展 Kubernetes 或在高合规性要求环境中运行时,企业会同时部署 Ingress controller 和负载均衡器。不过,二者部署在不同的位置,用于不同的用途,并由不同的团队进行管理。

● 负载均衡器(或称 ADC):

· 管理者:NetOps(也可能是 SecOps)团队

· 部署:位于 Kubernetes 外部,作为唯一面向公众的端点,为集群之外的用户提供服务和应用。作为一种更通用的应用,旨在提高安全防护,并促进交付更高级别的网络管理。

● Ingress controller:

· 管理者:平台运维团队或 DevOps 团队

· 部署:位于 Kubernetes 内部,提供细粒度的南北向负载均衡功能(HTTP2、HTTP/HTTPS、SSL/TLS 卸载、TCP/UDP、WebSocket、gRPC)。允许应用团队使用的某些配置(如 URI 或路径)以及高级反向代理或 API 网关功能。

下图显示了负载均衡器处理跨多个集群的流量分发,同时集群部署了 Ingress controller 来确保对 service 的平均分发。

Ingress controller = 安全防护工具

Ingress controller 可为应用安全防护提供一个细粒度的集成层,该层适用于确保“左移”安全防护,并能够更紧密地集成应用团队(而非 NetOps 或全局安全防护团队)所用的较低级别的安全防护工具。

Ingress controller 可成为安全工具库中的关键工具,帮助您将安全防护向左迁移,从而更好地满足微服务和现代应用的需求并从容地应对它们带来的风险。Ingress controller 的一些主要安全防护优势包括:

● 防止通过配置不当的负载均衡器直接访问 Pod

Ingress controller 可充当第二层访问控制,以防全局负载均衡器配置变为不安全设置。

● 执行 mTLS

因为 Ingress controller 在节点和 Pod 级别运行,而且是运行于 service 之上的控制回路,所以它是执行加密行为的最佳位置 — 最靠近实际应用。

● 异常检测和执行

Ingress controller 支持更轻松地实施逻辑规则,以处理可能代表有不良行为的异常情况。在全局层面,这些异常情况可能难以理解或衡量。对于管理微服务的小型团队而言,生成这种逻辑的最佳人员是 DevOps 和 service 开发人员本身;他们知道其流量的合理状况以及适用的规则。

● 更紧密地集成 WAF

大多数情况下,在 Kubernetes 中部署生产应用的任何人员均需使用 Web 应用防火墙 (WAF) 来保护应用和集群。WAF 能够过滤恶意流量,并保护暴露的应用。不过,与异常检测一样,配置为在企业环境的全局层面提供保护的 WAF 犹如钝器,不太适合在应用层实施更细粒度的安全防护。因此,许多团队现在都在 Kubernetes 内的 Ingress 层运行自己的 WAF,并与全局 WAF 分开管理。这些应用特定的 WAF 更易于在 Ingress controller 级别进行管理、集成和配置。在该级别,了解应用的团队可以同时设置入向/出向和安全防护策略。

Ingress controller = API 网关

Ingress controller 以 Kubernetes 原生方式整合了大多数 API 网关功能,可降低复杂性和成本,同时提高性能。

采用 Ingress controller 的最重要理由之一是节约成本和简单易用。因为 Ingress controller 是一种专用代理,所以它能够满足传统代理(负载均衡器/反向代理或 ADC)可实现的许多相同用例需求。其中包括多项负载均衡和 API 网关功能,例如:

● TLS/SSL 卸载

● 客户端身份验证

● 速率限制、重启和超时

● 细粒度的访问控制

● 四层和七层按请求路由

● 蓝/绿部署和灰度部署

● 传统协议(UDP、TCP)路由

● 新协议 (gRPC) 路由

● 请求头和请求/响应操作

● SNI 路由

● 基于高级 service/Pod 健康规则的路由

注:“API 网关”经常被视为一种单一产品。事实上,它是一组可通过代理实现的用例。大多数情况下,负载均衡器、ADC 或反向代理被部署为 API 网关。但在 NGINX,我们看到越来越多的 Ingress controller 和 service mesh(服务网格)被用于 API 网关功能。

您不一定能看出 Ingress controller 和标记为 API 网关的工具之间的相似性,这也无妨。在 Kubernetes 中,您实际上并不需要所有这些额外的特性,而且试图实现它们可能会给您带来麻烦。Kubernetes 中最适用的两个 API 网关用例是流量管理(协议、整形、精分)和安全防护(身份验证、端到端加密)。有鉴于此,您需要使用 Ingress controller 来处理以下操作:

● 方法级路由/匹配

● 身份验证/授权卸载

● 基于授权的路由

● 协议兼容性(HTTP、HTTP/2、HTTP/3、WebSockets、gRPC)

您的开发人员定会对您不胜感激,因为 Ingress controller 允许他们以可轻松融入工作流的 Kubernetes 原生方式(声明式/命令式 YAML)定义 API 网关或负载均衡器功能。您的法律和财务团队也将获益匪浅,因为成本更低,需要跟踪的许可更少。最后,客户和用户能够享受更佳的体验,因为从流量路径中移除额外的控制元素必定有助于提高性能。

请阅读《API 网关 vs. Ingress Controller vs. Service Mesh,该怎么选?》一文,了解有关该主题的更多信息,包括南北向和东西向 API 流量的示例场景。

Ingress controller = 可观测性和监控能力

Ingress controller 可监控所有进出流量,这意味着 Ingress controller 能够提供一个轻量级、集成式且易于管理的监控和可观测性层。

因为位于集群的前面并控制着四层—七层流量和传统或非 HTTP 协议流量,所以 Ingress controller 可提供应用和基础架构健康状态的特别视图。这一特性强大且实用。您可以轻松地将流量监控从现有数据和控制平面扩展到 Prometheus 等可观测性工具。事实上,大多数 Ingress controller 均原生集成了卓越的 CNCF 监控和可观测性工具,例如前面提到的 Prometheus 及与之密切相关的平台 Grafana。您可以使用 Ingress controller 处理以下两种用例:

● 应用运行缓慢:如果您的应用运行缓慢或崩溃了!— 具有实时监控功能的 Ingress controller 可帮助您准确找出问题所在。每秒请求数低可能表明出现配置错误,而响应时间延迟则可能表明上游应用存在问题。

● HTTP 错误:如果集群或平台资源耗尽,您可以使用 Ingress controller 中的历史数据来找出趋势。这正是 Grafana 等工具对数据可视化的用武之地。

如何提高 Kubernetes 环境的可见性》深入介绍了上述用例,包括演示如何使用 NGINX 工具和 Prometheus 及 Grafana 解决 Kubernetes 问题。

对于一些 service meshes、负载均衡器及其他 Kubernetes 风格的网络工具,创建监控和可观测性可能会增加负载和延迟。此外,它们也无法以与 Ingress controller 相同的细粒度级别解析流量。由于 Ingress controller 无需将额外的 CRD 或对象添加到您的配置文件和 Kubernetes 堆栈中,因此可避免不必要的复杂性和延迟。毕竟,部署的 CRD 越多,Kubernetes 环境就越复杂。

结论:Ingress controller 的功能远不止控制 Ingress

希望现在您已进一步了解为何 Ingress controller 是 Kubernetes 网络中的幕后英雄,意识到若不对其加以利用,可谓一大失误。一些注意事项如下:

● 并非所有 Ingress controller 都能用于本文所述的不同用例。我们的系列博文《Ingress Controller 选型指南》可帮助您确定需求,避免风险,放眼未来并驾驭复杂的 Ingress Controller 环境。

● 如果您的 Ingress 规则设计不合理且 Pod 资源不足,那么 Ingress controller 可能会降低应用运行速度。但如果您的规则设计合理,那么将 Ingress controller 部署到集群边缘的名义成本与您可实现的性能提升相比可谓微不足道。

Ingress controller 将不断改进并添加功能 — 事实上,Gateway API 的发布就是社区投资 Ingress controller 的最佳示例。

选择 Ingress controller 就是选择 Kubernetes 的未来。由于构建现代应用本质上就是构建松散耦合的 service 并赋予开发人员更大的自主权,因此部署 Ingress controller 能够加快应用开发和迭代速度。Kubernetes 网络工具的“瑞士军刀”正是普通开发人员或 DevOps 团队之所需,有助于智能、高效、安全地在应用之间转移流量。


NGINX 唯一中文官方社区 ,尽在 nginx.org.cn

更多 NGINX 相关的技术干货、互动问答、系列课程、活动资源: 开源社区官网 | 微信公众号

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

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

相关文章

CCF20211201——序列查询

CCF20211201——序列查询 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; #define Max 10000000 int a[Max]{0},b[Max]{0}; int main() {int n,m;int sum0,x0,flag0;cin>>n>>m;for(int i1;i<n;i){cin>>a[i];}for(int i0,x0;i&l…

闪电加载:Hexo博客性能优化全攻略

巴索罗缪大熊 前言 这些年积累了很多前端性能优化的知识点和思路&#xff0c;日常工作很少涉及技术层极限优化&#xff0c;近期终于一点点把博客独立搭建并部署了&#xff0c;对之前的一些技术点进行了深度探索&#xff0c;最终结果也达到了预期效果&#xff0c;由于水平有限&…

【安装笔记-20240528-Linux-在 Vultr 云服务器上安装 OpenWRT】

安装笔记-系列文章目录 安装笔记-20240528-Linux-在 Vultr 云服务器上安装测试 OpenWRT 文章目录 安装笔记-系列文章目录安装笔记-20240528-Linux-在 Vultr 云服务器上安装测试 OpenWRT 前言一、软件介绍名称&#xff1a;OpenWRT主页官方介绍 二、安装步骤测试版本&#xff1a…

【html+css(大作业)】二级菜单导航栏

目录 实现效果 代码及其解释 html部分 CSS部分 hello&#xff0c;hello好久不见&#xff01; 今天我们来写二级导航栏&#xff0c;所谓二级导航栏&#xff0c;简单来说就是鼠标放上去就有菜单拉出&#xff1a; 实现效果 代码及其解释 html部分 <!DOCTYPE html> &l…

白酒:新兴产区的发展与市场前景展望

云仓酒庄豪迈白酒作为新兴产区的重要代表&#xff0c;其发展与市场前景备受关注。随着消费者对白酒品质和口感的不断追求&#xff0c;新兴产区在继承传统酿造工艺的基础上&#xff0c;不断创新和发展&#xff0c;逐渐在市场上崭露头角。 首先&#xff0c;新兴产区在酿造工艺方面…

[源码+搭建教程]西游伏妖篇手游_GM_单机+和朋友玩

为了学习和研究软件内含的设计思想和原理&#xff0c;本人花心血和汗水带来了搭建教程&#xff01;&#xff01;&#xff01; 教程不适于服架设&#xff0c;严禁服架设&#xff01;&#xff01;&#xff01;请牢记&#xff01;&#xff01;&#xff01; 教程仅限学习使用&…

卧式混料机:混合设备的智慧之选

卧式混料机&#xff0c;顾名思义&#xff0c;是一种采用卧式结构的混合设备。它的设计精巧&#xff0c;结构紧凑&#xff0c;不仅占用空间小&#xff0c;而且操作简便&#xff0c;维护方便。与传统的立式混料机相比&#xff0c;卧式混料机在混合效率、混合均匀度以及物料适应性…

Suno进阶手册 | 创作歌曲玩法全攻略!

Suno进阶手册:创作歌曲玩法全攻略! 前言1. 基础模式2. 高级模式总结前言 前段时间,Suno V3 横空出世,与此前的V2相比,V3生成的作品质量明显提升! 该说不说,对比同类型工具,Suno的体验“遥遥领先”,没有AI生成常有的机械感,歌词押韵,甚至还附带有和声、分段。 虽然…

【一步一步了解Java系列】:类与对象的联系

看到这句话的时候证明&#xff1a;此刻你我都在努力加油陌生人个人主页&#xff1a;Gu Gu Study专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff1a;小闭 对…

6.1 Go 数组

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【双层模型】分布式光伏储能系统的优化配置方法

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 程序模型参考《分布式光伏储能系统的优化配置方法》&#xff0c;分为上下层求解方式&#xff0c;上层采用粒子群算法确定储能的选址和容量方案&#xff0c;以全年购电成本、网络损耗、光伏运行成本、储能充放…

2024年618网购节各大电商超级红包二维码集合

一年一度的电商618网购节又要来了&#xff0c;下面收集了淘宝/京东/拼多多的618红包二维码&#xff0c;手机扫描或识别即可每天领红包&#xff0c;可参考好物分享中的商品下单&#xff1a; 淘宝618超级红包&#xff1a;即日起至2024.6.10&#xff0c;每天可领一次 京东618无门…

idea项目一直在build

IDEA项目一直在build的原因可能包括构建进程堆大小过小、缓存问题、依赖包下载缓慢或网络问题。12 构建进程堆大小过小&#xff1a;如果IDEA的构建进程堆大小设置得不够大&#xff0c;可能会导致构建过程缓慢或卡顿。解决方法是将构建进程堆大小参数扩大&#xff0c;例如将700…

web前端框架设计第十一课-常用插件

web前端框架设计第十一课-常用插件 一.预习笔记 1.路由的基础使用 2.动态路由 3.嵌套路由 二.课堂笔记 三.课后回顾 –行动是治愈恐惧的良药&#xff0c;犹豫拖延将不断滋养恐惧

再次疾呼:一稿多投是作者的合法权利!

近日&#xff0c;有作者反应在收到拒稿邮件之后另投他刊&#xff0c;竟然被判定一稿多投。 出版社解释说现在大多数期刊都是使用投稿系统收稿&#xff0c;如果被退稿后马上又投稿其他期刊&#xff0c;由于时间距离太近&#xff0c;仍然会被系统判定为一稿多投的。核心期刊编辑…

pikachu—exec“eval“

这是原画面 然后呢&#xff1f; 我们知道会传入到后台rce_eval.php来处理然后通过 eval()是啥? 在eval括号里面可以执行外来机器的命令 然后我们通过php的一个内置的命令 我们通过phpinfo()&#xff1b; 这是输入后的结果

Figma 文件批量导出到本地的方法

作为新一代UX设计师&#xff0c;我们应该熟练地使用市场上的许多设计软件&#xff0c;并更熟悉它们的软件功能。现在市场上的即时设计&#xff0c;作为一种在线合作设计工具&#xff0c;值得成为许多设计师的常用工具。最近&#xff0c;我了解到即时设计进行了新的功能更新&…

第二十五章CSS中的技巧(导航栏、下拉列表)

1.CSS精灵 1.什么是CSS精灵 英文叫法 CSS sprites&#xff0c;通常被解释为“CSS图像拼合”或“CSS贴图定位”;其实就是把网页中一些背景图片整合到一张图片文件中&#xff0c;再利用css“background-image”&#xff0c; “background-repeat”,“background-position”的组…

【Unity Shader入门精要 第11章】让画面动起来(二)

1. 顶点动画的原理 顶点动画的原理是&#xff0c;在顶点着色器中按照一定的规则或函数计算得到一段偏移量对顶点进行移动&#xff0c;最后将改变位置后的顶点变换到裁剪空间进行后续的渲染工作。 可见&#xff0c;与纹理动画只是改变从纹理中哪一部分开始显示图案不同&#x…

水质预测模型精度评估实例

研究背景 随着水资源管理需求的日益增长&#xff0c;水质预测模型的精准度成为了评估其有效性的关键因素。本文旨在通过实证研究&#xff0c;探讨自建水质预测模型的实际应用效能&#xff0c;通过与真实监测数据的比对&#xff0c;揭示模型预测精度的真实情况。 数据基础情况…