首页 > 其他分享 >当创建一个ingress后,kubernetes会发什么?

当创建一个ingress后,kubernetes会发什么?

时间:2024-01-05 10:36:45浏览次数:33  
标签:Ingress kubernetes lua 配置 ingress nginx 会发 控制器

本文分享自华为云社区《当创建一个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 原理解析

当创建一个ingress后,kubernetes会发什么?_nginx

nginx-ingress 模块在运行时主要包括三个主体:NginxController、Store、SyncQueue。

Store 主要负责从 kubernetes APIServer 收集运行时信息,感知各类资源(如 ingress、service等)的变化,并及时将更新事件消息(event)写入一个环形管道;

NginxController 作为中间的联系者,监听 updateChannel,一旦收到配置更新事件,就向同步队列 syncQueue 里写入一个更新请求。

SyncQueue :

  1. 协程定期扫描 syncQueue 队列,发现有任务就执行更新操作
  2. 借助 Store 完成最新运行数据的拉取(一般为新写入信息)

然后根据一定的规则产生新的 nginx 配置,(有些更新必须 reload,就本地写入新配置,执行 reload),然后执行动态更新操作,即构造 POST 数据,向本地 Nginx Lua 服务模块发送 post 请求,实现配置更新;

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。ingress nginx controller 嵌入多个lua脚本。下面对整个lua脚本处理过程做个简单梳理。

当创建一个ingress后,kubernetes会发什么?_nginx_02

  • 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*:记录访问日志

点击关注,第一时间了解华为云新鲜技术~


标签:Ingress,kubernetes,lua,配置,ingress,nginx,会发,控制器
From: https://blog.51cto.com/u_15214399/9110201

相关文章

  • 部署Kubernetes(K8s)高可用群集需要多个步骤和考虑因素
    部署一个Kubernetes(K8s)高可用群集需要多个步骤和考虑因素。以下是详细步骤:规划和准备:评估集群需求,包括资源(CPU、内存、存储)、网络、安全和可扩展性。选择部署环境:公有云、私有云、混合云或本地数据中心。选择合适的Kubernetes发行版,例如kubeadm、Kops、Rancher或云提供商的托管服务......
  • Kubernetes 配置Pod使用代理上网
    配置KubernetesPod使用代理上网在企业网络环境中进行Kubernetes集群的管理时,经常会遇到需要配置Pods通过HTTP代理服务器访问Internet的情况。这可能是由于各种原因,如安全策略限制、网络架构要求或者访问特定资源的需要。本文将介绍配置Kubernetes中Pod使用代理的两种常见方式:通过......
  • VMware Tanzu Kubernetes Grid (TKG) 1.4 下载 - VMware Kubernetes 分发版
    作者:gc,主页:www.sysin.orgTanzuKubernetes集群是由VMware构建、签名和支持的开源Kubernetes容器编排平台的完整分发版。可以通过使用TanzuKubernetesGrid服务在主管集群上置备和运行TanzuKubernetes集群。主管集群是启用了vSpherewithTanzu的vSphere集群。Tanzu......
  • 跨集群流量调度实现 Kubernetes 集群金丝雀升级
    有了多集群服务和跨集群的流量调度之后,使用Kubernetes的方式会发生很大的变化。流量的管理不再限制单一集群内,而是横向跨越了多个集群。最重要的是这一切“静悄悄地”发生,对应用来说毫无感知。就拿Kubernetes版本升级来说吧。记得曾经经历过集群的原地升级:团队的几个人经过多次......
  • VMware Tanzu Community Edition (TCE) 0.9 - 适合所有人的 Tanzu Kubernetes
    作者:gc,主页:www.sysin.org2021.10.04,VMware宣布了一个非常令人兴奋的新项目,称为TanzuCommunityEdition。以下TanzuCommunityEdition介绍翻译自VMware相关博客。什么是Tanzu社区版,为什么要关心?今天,最终用户(管理员、架构师、开发人员、平台运营商等)很难获得VMware的Tan......
  • VMware Tanzu Kubernetes Grid Integrated Edition (TKGI) 1.12 下载
    作者:gc,主页:www.sysin.orgVMwareTanzuKubernetesGridIntegratedEdition(TKGI)使运营商能够使用BOSH和OpsManager配置、运营和管理企业级Kubernetes集群。VMwareTanzuKubernetesGridIntegratedEdition(以前称为VMwareEnterprisePKS)是基于Kubernetes的容器解决......
  • 非Kubernetes工作负载(如虚拟机或裸机服务器)加入网格(续)
    摘要:workloadgroup类似于deployment;workloadentry类似于pod;存活探针不是服务网格的关注点;workloadgroup必须配置应用程序的就绪探针关键点:在vm上输入所有节点的路由routeadd-net172.25.244.192/26gw 192.168.31.211......;将东西向网关的主机名硬编码到vm的hosts文件中;istio-......
  • Kubernetes与Docker"分手"之后如何设计DevOps流水线
    一、前言总所周知,从Kubernetes1.24版本开始已经弃用Docker这个陪伴它风声水起的"初恋女友",届时在Kubernetes社区掀起了异常"轩然大波",影响甚至波及到社区之外的,也导致了Kubernetes不得不写好几篇博客来反复解释这么做的原因,虽然是老生常谈的问题了,如今距离1.24版本正式发布已过去......
  • kubernetes 集群 oom 导致集群无法访问
    现象执行kubectlgetnode无法获取集群状态。日志截图:查看message日志,发现报错存在OOM,并与应用测试的容器相关,截图如下:分析首先,定位最初的oom发生的时间点,是2023年12月15日,如图按照正常逻辑来讲,应用实例做了limit限制,如果应用超出内存限制,应该被杀掉并且进行重新调度。进一步......
  • kubernetes部署gitlab
    1.部署镜像地址:ExploreDocker'sContainerImageRepository|DockerHubgithub地址:sameersbn/docker-gitlab:DockerizedGitLab(github.com)PostgreSQL:OmnibusGitLab附带的PostgreSQL版本|极狐GitLab环境变量介绍:sameersbn/docker-gitlab:DockerizedGitLab(gith......