接上篇博客: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