当前位置: 首页 > news >正文

Ingress controller:Kubernetes 的瑞士军刀

原文作者: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 相关的技术干货、互动问答、系列课程、活动资源: 开源社区官网 | 微信公众号

相关文章:

Ingress controller:Kubernetes 的瑞士军刀

原文作者:Brian Ehlert of F5 原文链接:Ingress controller:Kubernetes 的瑞士军刀 转载来源:NGINX 中文官网 NGINX 唯一中文官方社区 ,尽在 nginx.org.cn 许多人认为 Ingress controller(Ingress 控制器&…...

uniapp tabBar app页面滚动闪屏的问题

我在做app的时候,调试tabBar页面滚动时莫名其妙的闪屏,其他页面不闪屏,可能跟新建的项目样式有关。 修改方法如下。 在pages.json中 "tabBar": {"selectedColor": "#204AFF","color": "#ccc…...

【计算机毕业设计】388微信小程序足球赛事及队伍管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…...

监控易监测对象及指标之:华为FusionInsight Kafka服务全方位监控

监控易提供对华为FusionInsight Kafka服务的全方位监控功能。该功能可以帮助用户实时监测Kafka服务的各项性能指标,确保服务的稳定运行和高效性能。 具体功能点包括: 服务状态监测:监控易能够实时监测华为FusionInsight Kafka服务的运行状态…...

Python装饰器的应用

Python 中的装饰器是一种语法糖,可以在运行时,动态的给函数或类添加功能。装饰器本质上是一个函数,使用 函数名就是可实现绑定给函数的第二个功能 。它的作用就是在不修改被装饰对象源代码和调用方式的前提下为被装饰对象添加额外的功能。 …...

【数据结构与算法 | 基础篇】力扣232, 225

1. 力扣232 : 用栈实现队列 (1). 题 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移…...

内网(极空间)搭建gitlab跳板机转发端口及域名配置

背景说明 https://blog.csdn.net/GodDavide/article/details/139182475 上文说到: 我已经用docker搭好了gitlab-ce服务,但我是部署在自己的家庭nas-极空间z4pro里的,属于内网环境。 另外我有一台阿里云服务器,做跳板机。 我有一个阿里的域名…...

如何知道自己电脑的 Shell类型是什么?

在macOS中,你可以通过以下几种方法来确定当前正在使用的shell类型,并了解相关的配置文件: 1. 使用终端命令确定shell类型 打开终端应用程序(Terminal)。输入以下命令并按回车键:echo $SHELL。该命令会输出…...

Axios的使用简单说明

axios 请求方式和参数 axios 可以发送 ajax 请求,不同的方法可以发送不同的请求: axios.get:发送get请求 axios.post:发送post请求 axios.put:发送put请求 axios.delete:发送delete请求 无论哪种方法,第一…...

查找list集合中,持续时间>=ContinueTime的数据集合,保存在新的list中

在给定的包含时间戳的list中,查找连续continueNum次的且时间间隔为needDiff的集合。 eg:相邻两个数据的时间戳间隔为1分钟,且超过30分钟有数据 /**** param list 包含时间戳(10位)的list* param continueNum 至少持续…...

nginx 反向代理配置详解

Nginx 反向代理是一种常用的部署策略,用于将客户端请求转发到内部网络中的一个或多个服务器,这些服务器直接处理请求并返回响应给Nginx,再由Nginx转交给客户端。这种设置可以提高网站的可用性和安全性,同时也能实现负载均衡、缓存…...

微信小程序毕业设计-农场驿站平台系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…...

CAN总线应用协议CANopen

作为一种真正开放的CAN总线高层协议,CANopen协议允许不同的CAN设备以标准化的方式进行通讯,这使得CAN 设备具有互操作性。随着CANopen协议的日益完善,它已经广泛应用于多个行业。本文将对CANopen协议的对象字典、通讯对象、网络管理等几个方面…...

htop安装不了怎么解决

🌟🌌 欢迎来到知识与创意的殿堂 — 远见阁小民的世界!🚀 🌟🧭 在这里,我们一起探索技术的奥秘,一起在知识的海洋中遨游。 🌟🧭 在这里,每个错误都…...

vue 笔记02

目录 01 事件修饰符 02 按键修饰符 03 v-bind属性 04 vue-axios的基本使用 05 vue的生命周期 06 vue生命周期涉及到的其他的知识点 01 事件修饰符 vue的事件修饰符 事件名称.修饰符1.修饰符2...事件驱动函数 stop 阻止冒泡修饰符 prevent 阻止默认行为 once 当前事件只触…...

MySQL8.0免安装及phpmyadmin配置

安装包解压,运行mysqld文件后,启动net start,提示成功,但进入phpmyadmin登录页面后,输入用户名,提示不支持空密码,config.default.php设置密码后,提示 mysqli::real_connect(): (HY…...

【目标解算】相机内外参数详细解读+坐标系转换

一、相机参数介绍 1.1 相机内参矩阵 概念:内参矩阵用于描述相机的内部参数,它包含了相机的焦距、主点坐标和图像的畸变等信息。内参矩阵的形式通常为一个3x3的矩阵,常用表示为K。内参矩阵可以将相机坐标系中的三维点映射到图像平面上的二维…...

【Unity】颜色混合计算

在图形渲染中,颜色混合(Color Blending)是指将多个颜色值组合在一起以生成最终显示的颜色。颜色混合技术广泛用于处理半透明效果、光照效果和后期处理效果。以下是一些常见的颜色混合模式: 1. 正常混合(Normal Blendi…...

Vue源码解析

入门级 <body><div id"app"></div><script>class Vue {constructor(options) {// thisVue 把options.created的this 指向Vue实例options.created.bind(this)();// this.$el 指向#appthis.$el document.querySelector(options.el);// 把opt…...

Linux---网络相关配置

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 一台主机需要配置必要的网络信息&#xff0c;才可以连接到互联网&#xff0c;需要的配置网络信息包括IP&#xff0c;子网掩码&#xff0c;网关和DNS。 一.查看网络信息 查看IP信息可以通…...

MATLAB分类与判别模型算法:基于Fisher算法的分类程序【含Matlab源码 MX_002期】

算法思路介绍&#xff1a; 费舍尔线性判别分析&#xff08;Fishers Linear Discriminant Analysis&#xff0c;简称 LDA&#xff09;&#xff0c;用于将两个类别的数据点进行二分类。以下是代码的整体思路&#xff1a; 生成数据&#xff1a; 使用 randn 函数生成随机数&#x…...

长文总结 | Python基础知识点,建议收藏

测试基础-Python篇 基础① 变量名命名规则 - 遵循PEP8原则 普通变量&#xff1a;max_value 全局变量&#xff1a;MAX_VALUE 内部变量&#xff1a;_local_var 和关键字重名&#xff1a;class_ 函数名&#xff1a;bar_function 类名&#xff1a;FooClass 布尔类型的变量名…...

centos中使用Docker安装rabbitmq记录

一、安装rabbitmq docker run -d --name rabbitmq -p 5672:5672 -p15672:15672 -v rabbitmq-plugin:/plugins -e RABBITMQ_DEFAULT_USERxiaoqi -eRABBITMQ_DEFAULT_PASS123456 rabbitmq:latest二、配置web管理界面 # 查看运行的容器 docker ps -a # 根据容器id进入容器内部 …...

STM32系列-STM32介绍

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” STM32介绍 STM32介绍 ST&#xff1a;指的是意法半导体 M&#xff1a;指定微处理器 32&#xff1a;表示计算机处理器位数 ARM分成三个系列&#xff1a; Cortex-A&#xff1…...

网络原理 一

一、协议 网络通信中,协议是非常重要的概念. 协议进行了分层,此处就是按照这几层顺序来介绍每一层中的核心协议. 应用层,就对应着应用程序,是程序员打交道最多的一层,调用系统提供的 网络api 写出的代码都是基于应用层的. 应用层这里当然也有很多现成的协议,但更多的还是,程…...

xcode配置快速打开终端命令行工具教程

以往我们使用idea编辑器或者vscode编辑器的时候&#xff0c;我们可以快速的在编辑器下面打开终端进行相关的操作&#xff0c;但是在xcode里面却没有这么方便的功能按钮&#xff0c;真的不是很习惯&#xff0c;所以这次就来给xcode配置这么一个方便的功能。 idea的Terminal 这…...

AIGC降重:如何2分钟降低论文AI率和查重率?推荐使用SpeedAI科研小助手

确保学术论文的独立性与诚信性&#xff0c;对于学业的成就及学位的获取至关重要&#xff0c;其中&#xff0c;论文的人工智能查重与降低AIGC相似度扮演着核心角色。 常规的查重手段主要围绕查重软件的运用和个体的自行审查&#xff1b;而降重则通常通过语句重组、同义替换、内…...

Blazor入门-连接MySQL的简单例子:列出数据+简单查询

参考&#xff1a; ASP.NET Core 6.0 Blazor Server APP并使用MySQL数据库_blazor mysql-CSDN博客 https://blog.csdn.net/mzl87/article/details/129199352 本地环境&#xff1a;win10, visual studio 2022 community, mysql 8.0.33 (MySQL Community Server), net core 6.0 目…...

CEEMDAN +组合预测模型(CNN-Transfromer + XGBoost)

注意&#xff1a;本模型继续加入 组合预测模型全家桶 中&#xff0c;之前购买的同学请及时更新下载! 往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 VMD CEEMDAN 二次分解&#xff0c;Transformer-BiGRU预测模…...

箭头函数的意义和函数的二义性

前言 说到箭头函数&#xff0c;可能很多人的第一反应就是和普通函数的区别&#xff1a; 箭头函数没有 this&#xff0c;普通函数的 this 指向依赖它是如何被调用的箭头函数没有 arguments 对象&#xff0c;而是通过剩余参数&#xff08;rest parameters&#xff09;来获取所有…...