当创建一个ingress后,kubernetes会发什么?
本文分享自华为云社区《当创建一个ingress后,kubernetes会发什么?》,作者:可以交个朋友。
一、Ingress概述
Ingress是一组路由转发规则合集,将集群内部服务通过7层协议暴露给用户,是一种k8s默认的资源。Ingress资源对象用于定义来自外网的HTTP和HTTPS规则,流量路由由Ingress资源上定义的规则控制。从而达到管理控制进入集群内部流量的目的。
二、Ingress 相关定义
Ingress资源:Ingress是一个API对象,一般通过yaml进行配置,其作用是定义请求如何转发到service的规则,可以理解为配置模板。
Ingress-controller组件:入口控制器(ingress-controller)管理L4层和L7层请求的南北向流量,也就是指从集群外部进入或离开集群的流量。是具体实现反向代理及负载均衡的程序,对Ingress定义的规则进行解析,根据配置的规则来实现请求转发。
三、Ingress Controller 百花齐放
目前Ingress暴露集群内服务的行内被公认为是最好的方式,由于其重要地位,世面上有非常多的Ingress Controller,常见的有:
-
Kubernetes Ingress Nginx
Kubernetes Ingress的官方推荐的Ingress控制器,它基于nginx Web服务器,并补充了一组用于实现额外功能的Lua插件。由于Nginx的普及使用,在将应用迁移到K8S后,该Ingress控制器是最容易上手的控制器,而且学习成本相对较低,建议使用。不过当配置文件太多的时候,Reload会很慢。
-
Nginx Ingress
Nginx Ingress是NGINX开发的官方版本,它基于NGINX Plus商业版本,NGINX控制器具有很高的稳定性,持续的向后兼容性,没有任何第三方模块,并且由于消除了Lua代码而保证了较高的速度(与官方控制器相比)。它支持TCP/UDP的流量转发,付费版有很广泛的附加功能,主要缺点就是缺失了鉴权方式、流量调度等其他功能。
-
Kong Ingress
Kong Ingress建立在NGINX之上,并增加了扩展其功能的Lua模块。kong之前是专注于API网关,现在已经成为了成熟的Ingress控制器,相较于官方控制器,在路由匹配规则、upstream探针、鉴权上做了提升,并且支持大量的模块插件,便与配置。它提供了一些 API、服务的定义,可以抽象成 Kubernetes 的 CRD,通过Kubernetes Ingress 配置便可完成同步状态至 Kong 集群。
-
Traefik Ingress
traefik Ingress是一个功能很全面的Ingress,官方称其为:Traefik is an Edge Router that makes publishing your services a fun and easy experience。它具有许多有用的功能:连续更新配置(不重新启动),支持多种负载平衡算法,Web UI,指标导出,支持各种协议,REST API,Canary版本等。开箱即用的“Let'sEncrypt”支持是另一个不错的功能。而且在2.0版本已经支持了TCP / SSL,金丝雀部署和流量镜像/阴影等功能,社区非常活跃。
-
HAProxy Ingress
HAProxy作为王牌的负载均衡器,在众多控制器中最大的优势还在负载均衡上。它提供了“软”配置更新(无流量丢失),基于DNS的服务发现,通过API的动态配置。HAProxy还支持完全自定义配置文件模板(通过替换ConfigMap)以及在其中使用Spring Boot函数。
-
APISIX Ingress
ApiSix Ingress是一个新兴的Ingress Controller,它主要对标Kong Ingress。它具有非常强大的路由能力、灵活的插件拓展能力,在性能上表现也非常优秀。同时,它的缺点也非常明显,尽管APISIX开源后有非常多的功能,但是缺少落地案例,没有相关的文档指引大家如何使用这些功能。
四、ingress nginx 原理解析
nginx-ingress 模块在运行时主要包括三个主体:NginxController、Store、SyncQueue。
Store 主要负责从 kubernetes APIServer 收集运行时信息,感知各类资源(如 ingress、service等)的变化,并及时将更新事件消息(event)写入一个环形管道;
NginxController 作为中间的联系者,监听 updateChannel,一旦收到配置更新事件,就向同步队列 syncQueue 里写入一个更新请求。
SyncQueue :
- 协程定期扫描 syncQueue 队列,发现有任务就执行更新操作
- 借助 Store 完成最新运行数据的拉取(一般为新写入信息)
然后根据一定的规则产生新的 nginx 配置,(有些更新必须 reload,就本地写入新配置,执行 reload),然后执行动态更新操作,即构造 POST 数据,向本地 Nginx Lua 服务模块发送 post 请求,实现配置更新;
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。ingress nginx controller 嵌入多个lua脚本。下面对整个lua脚本处理过程做个简单梳理。
-
init_by_lua*:初始化 nginx 和预加载 lua(nginx 启动和 reload 时执行);
-
init_worker_by_lua*:每个工作进程(worker_processes)被创建时执行,用于启动一些定时任务,
比如心跳检查,后端服务的健康检查,定时拉取服务器配置等;
-
ssl_certificate_by_lua*:对 https 请求的处理,即将启动下游 SSL(https)连接的 SSL 握手时执行,用例:按照每个请求设置 SSL 证书链和相应的私钥,按照 SSL 协议有选择的拒绝请求等;
-
set_by_lua*:设置 nginx 变量;
-
rewrite_by_lua*:重写请求(从原生 nginx 的 rewrite 阶段进入),执行内部 URL 重写或者外部重定向,典型的如伪静态化的 URL 重写;
-
access_by_lua*:处理请求(和 rewrite_by_lua 可以实现相同的功能,从原生 nginx 的 access阶段进入);
-
content_by_lua*:执行业务逻辑并产生响应,类似于 jsp 中的 servlet;
-
balancer_by_lua*:负载均衡;
-
header_filter_by_lua*:处理响应头;
-
body_filter_by_lua*:处理响应体;
-
log_by_lua*:记录访问日志

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
摆脱自研难题,AUI Kit助力企业快速搭建专属互动课堂
本专栏将分享阿里云视频云MediaBox系列技术文章,深度剖析音视频开发利器的技术架构、技术性能、开发能效和最佳实践,一起开启音视频的开发之旅。本文为MediaBox最佳实践篇,重点从互动课堂AUI Kit的核心功能、技术架构、快速集成等方面,介绍如何通过低代码快速接入专属互动课堂视频业务。 炖叔、炯心|作者 “双减”政策后,在线教育行业进入全新发展阶段。越来越多的用户通过App等方式参与在线教育,其中,K12和高等教育等细分领域用户的使用频率增长显著。 在线教育行业正呈现加速整合和变革的趋势:一些大型在线教育平台通过收购、合并等方式扩大市场份额和优化资源配置,传统教育机构也开始积极布局、转型。 需求增长的背后需要技术的强大支撑。然而,在线教育高度依赖的音视频技术,其复杂度和成本使得不同教育机构和企业在考虑自研专属课堂时遇到难以突破的瓶颈。 面对这些趋势和挑战,互动课堂AUI Kit提供在线互动课堂音视频解决方案,致力于让企业摆脱自研难题,在降低开发门槛、缩短开发周期的同时,专注于业务开发。 01 互动课堂AUI Kit 概念说明 过去,构建在线课堂产品时可选方案通常是SaaS或P...
- 下一篇
国产自主操作系统内核宣布支持weston
weston是一套Wayland窗口显示协议的实现。而目前主流的Linux发行版桌面系统都在使用Wayland的方式做多窗口的显示合成,例如Ubuntu,Federa等。 Wayland以高性能和直接渲染为核心特点,为图形处理提供了更为高效的方式。Wayland的工作原理有些类似于:Wayland中会分成客户端和服务端(服务端也叫Compositor,合成器)。相较于老的X11,客户端负责完成所有的渲染任务。接到输入信号后,客户端会自行计算需渲染的区域,并在内存中分配空间。绘制好的图像会被存入缓冲区,随后通知Wayland的合成器。合成器负责接收所有客户端的请求,对图像缓冲区进行高效合成,然后将结果发送给渲染器进行渲染。这种新方式相较于传统的X11方式,大幅降低了客户端与服务器之间的交互和数据传输,从而提升了渲染效率。 Weston是Wayland的一个参考实现,可以看成它是一个简单的图形多窗口的桌面系统。但Weston本身的实现也并不简单,有基于socket方式通信的多客户端管理(通过epoll来监听),基本都是以fd方式进行管理,进行操作(衍生出来的包括eventfd, timer...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程