首页 > 其他分享 >ingress controller openresty lua脚本的开发

ingress controller openresty lua脚本的开发

时间:2024-11-01 10:16:53浏览次数:3  
标签:ingress nginx -- etc lua controller 镜像

接上篇博客:https://blog.csdn.net/weixin_34542632/article/details/143405219?spm=1001.2014.3001.5501,我们接下来一起看一下ingress网关的lua脚本开发。

一些基础信息:
  • ingress controller 其实就是openresty,官方话术:This module is a core component of OpenResty. If you are using this module, then you are essentially using OpenResty 。所以开发ingress的lua脚本其实就是基于openresty开发,可以用openresty带的各种组件。
  • lua组件的开发有两种方式,1、mount your plugin into /etc/nginx/lua/plugins/<your plugin name> in the ingress-nginx pod,也就是配置挂载,把组件挂载到ingress的节点上。2、build your own ingress-nginx image like it is done in the example and install your plugin during image build,自己创建ingress镜像,然后就可以直接用这个镜像。

本篇文章介绍的是第二种方法,创建自己的ingress镜像。整体步骤:

  • 先找到ingress controller的基础镜像,这个你可以在ingress controller的官网找到。
  • 编写自己的lua脚本,命名为main.lua
  • 编写dockerfile,打包成docker镜像
  • 去rancher上配置ingress controller节点
先来看看dockerfile怎么写
FROM ${你自己的镜像仓库}/ingress-nginx/controller:v0.43.0-4@sha256:871dbc0c16f1e9c638191c5d00ddee2cefc8b3c7717cc33aeec75d8bf04b799a

USER www-data
//这行将本地的 nginx.conf.default 文件复制到镜像中的 /etc/nginx/ 目录。这个文件通常是 NGINX 的默认配置文件。
COPY ${你自己的nginx.conf.default 文件文件目录} /etc/nginx/

COPY usr/local/nginx/html/ /usr/local/nginx/html/
// 这行将本地的 Lua 插件复制到镜像中的 /etc/nginx/lua/plugins/ 目录
COPY etc/nginx/lua/plugins/ /etc/nginx/lua/plugins/

从dockerfile我们其实就可以看的出来,我们应该在/etc/nginx/lua/plugins/目录下开发我们的组件,大家可以从下图看出来我的项目结构。可以看到plugins 目录下有个自定义的文件夹且里面含一个main.lua脚本,我们编写的lua脚本就是这个main.lua脚本,这里自定义的user_info文件夹是有用的,后面在rancher上配置时会再次出现。

lua脚本例子
-- 重写请求头
local function rewrite_request_headers()
    -- 添加或修改请求头
    ngx.req.set_header("X-Custom-Request-Header", "CustomValue")
    
    -- 示例:删除某个请求头
    ngx.req.clear_header("X-Unwanted-Header")
end

-- 重写响应头
local function rewrite_response_headers()
    -- 添加或修改响应头
    ngx.header["X-Custom-Response-Header"] = "CustomResponseValue"
    
    -- 示例:删除某个响应头
    ngx.header["X-Unwanted-Response-Header"] = nil
end

-- 在请求处理前执行重写请求头
rewrite_request_headers()

-- 处理请求(例如:代理到后端服务)
ngx.exec("@backend")

-- 在响应阶段执行重写响应头
rewrite_response_headers()
rancher上的配置

这里的user_info其实就是我们自定义的文件夹,镜像仓库就填docker镜像地址,tag就是打包时候的版本,如此这般如果运气好的话服务可以启动起来,但是我遇到了一个问题,因为用的是互联网公共的chart镜像仓库。会报错公用镜像拉取超过上限:

Failed to pull image "docker.io/jettech/kube-webhook-certgen:v1.5.1": rpc error: code = Unknown desc = Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit

解决办法:自己去吧这个镜像下载至自己的镜像仓库,然后用自己镜像仓库的镜像,然后新增如下配置


风雪压我两三年,我笑风雪轻如棉

标签:ingress,nginx,--,etc,lua,controller,镜像
From: https://blog.csdn.net/weixin_34542632/article/details/143425451

相关文章

  • Proportional Controller比例控制器
    ProportionalController比例控制器通过接收外部的控制信号,将这些信号转换为相应的机械位移或力,进而驱动比例阀的阀芯移动,从而改变阀口的开度,实现对压力、流量等参数的连续、按比例控制。连续控制:与开关控制相比,比例阀控制器能够实现对压力、流量等参数的连续、无级调节。高......
  • 统计项目中所有的Controller接口并导出
    packagecom.example.mock.controller;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.we......
  • 面试官:Spring Boot 控制层中,@Service 可以完全替代 @Controller 吗?90% 都会答错!
    作者:毅航来源:juejin.cn/post/7393533304505204787在SpringBoot开发中,@Controller和@Service基本上是日常开发中使用的最频繁的两个注解。但你有没考虑过@Service代替@Controller注解来标注到控制层的场景?换言之,经过@Service标注的控制层能否实现将用户请求分发到服务层的功能?......
  • MAnimal Controller文档——Main
    MAnimalController动物脚本负责控制动物的所有运动逻辑。它管理所有的Animator和RigidBody参数,以及动物可以执行的所有States和Modes。MainPrinciplesAnimalController(AC)是一个动画框架控制器,支持根运动或就地动画,适用于任何生物或人形角色。它使用Rigidbody与物理世界......
  • PlayWright.Net EvaluateAsync定位选择所以子元素
    playwright=awaitPlaywright.CreateAsync();varuserDataDir=$"{Directory.GetCurrentDirectory()}\\UserData";varcontext=awaitplaywright.Chromium.LaunchPersistentContextAsync(userDataDir,newBrowserTy......
  • 条理清晰,浅显易懂:Lua语法技术知识详解(第三部分)
    今天我们继续学习Lua语法基础教程,下篇。9.4 函数返回值在前面的代码中,我们实现了一个函数,输入变量a、b,函数会自动输出两个数值的和。但是一般来说,我们的需求远远不止这些,我们可能需要一个如下功能的函数:执行函数,输入两个值,获取这两个值的和如果还是按上面几节的内容,我们只会......
  • 【Java】若以框架(ruoyi-master)——10.BaseController源码了解
    BaseController通用方法Web层的通用数据。所有接口继承此方法。里面有一些各个接口会用到的通用方法。比如分页、返回消息、设置或获取一些登录信息,某些操作的时候,将日志写入或返回。方法归类方法名称说明请求参数预处理initBinder()将前台传递过来的日期格式的字符......
  • Lua代码——使用遗传进化算法(neat算法)玩超级玛丽游戏
    前文:模拟器运行环境及Lua代码——使用遗传进化算法(neat算法)玩超级玛丽游戏SuperMario_GeneticEvolution_Neat项目介绍:模拟器运行环境及Lua代码——使用遗传进化算法(neat算法)玩超级玛丽游戏代码地址:https://openi.pcl.ac.cn/devilmaycry812839668/SuperMario_GeneticEvol......
  • 部署 Traefik 实现 dashboard 与 原生Ingress使用 CRD IngressRoute使用
    部署Traefik00-namespace.ymlapiVersion:v1kind:Namespacemetadata:name:test-traefik00-role.ymlkind:ClusterRoleapiVersion:rbac.authorization.k8s.io/v1metadata:name:traefik-rolenamespace:test-traefikrules:-apiGroups:-"&......
  • 详解 helm 部署 ingress-nginx
    使用Helm安装参考文档:https://kubernetes.github.io/ingress-nginx/deploy/添加ingress-nginx官方helm仓库helmrepoaddingress-nginxhttps://kubernetes.github.io/ingress-nginxhelmrepoupdate下载Chart包#查找所有的版本helmsearchrepoingress-nginx/ingress-n......