使用OpenResty实现苍穹补丁更新

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

使用OpenResty实现苍穹补丁更新

1 背景说明

因客户的安全规范要求,服务器不提供ssh连接方式,这将导致苍穹默认的升级补丁方式无法正常使用(K8S无法ssh连接nginx服务器),无法自动更新应用仓库和静态资源,手动更新补丁需要一定的运维能力且失误率高。为解决这一难题,可以使用OpenRestry方案来实现苍穹补丁更新。


两种更新方式的流程对比:

流程图-SSH方式更新苍穹补丁


流程图-Openresty方式更新苍穹补丁


2 openresty部署配置

2.1安装openresty

下载地址:http://openresty.org/cn/download.html

编译安装:

# ./configure --prefix=/usr/local/openresty --with-luajit --with-cc-opt=-O2 --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_ssl_module  --with-http_iconv_module

# make && make install


修改配置文件参考下文

启动服务: /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf

停止服务: /usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf -s stop

注册系统服务:

新增或修改系统服务配置文件

# vi /usr/lib/systemd/system/openresty.service
[Unit]
Description=The openresty nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
#指定用户和组运行
User=root
Group=root
ExecStartPre=/usr/local/openresty/nginx/sbin/nginx -t
ExecStart=/usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload

# systemctl start openresty

2.2 权限配置

openresty的运行用户要能对服务根目录/var/appstatic、应用仓库路径、补丁仓库路径、静态资源路径进行操作,且能访问其根目录 (建议都配置在服务根目录下)。


2.3 访问配置

openresty/nginx/conf/的nginx.conf配置参考如下:

# cat /usr/local/openresty/nginx/conf/nginx.conf
user  root;  #设置普通用户运行需要对安装目录、日志目录、应用仓库等目录授权
worker_processes  4;
events {
    use epoll;
    multi_accept on;
    worker_connections  61024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    access_log  logs/access.log  main;
    client_max_body_size   2048m;
    sendfile        on;
    #tcp_nopush     on;
    gzip    on;
    gzip_buffers   4 8k;
    gzip_comp_level 2;
    gzip_min_length 1000;
    gzip_types text/plain text/json text/css application/x-httpd-php application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript image/png image/jpg image/jpeg image/gif image/bmp;
    keepalive_timeout  65;
include conf.d/*.conf;

    server{
        listen       8188 default_server;    #服务监听端口,可自定义修改
        listen       [::]:8188 default_server;  #服务监听端口,可自定义修改
        server_name  localhost;
        root         /var/appstatic/; # 应用仓库和静态资源根路径
        autoindex on; # 显示目录结构
        autoindex_exact_size on; # 显示文件大小
        autoindex_localtime on;# 显示文件时间
        client_max_body_size   2048m;

        location /upload {
            content_by_lua_file lua/upload.lua;
        }
        location /copy {
            content_by_lua_file lua/cp.lua;
        }
        location /unzip {
            content_by_lua_file lua/unzip.lua;
        }
        location /mkdir {
            content_by_lua_file lua/mkdir.lua;
        }
        location /clear {
            content_by_lua_file lua/rm.lua;
        }
    }

}

说明:

(1)本文以监听8188端口为例,具体可自定义修改。

(2)设置nginx的运行用户为root,可自定义用户,但需要提前授权:  user  root;

(3)修改上传大小限制为: client_max_body_size   2048m;

(4)Lua脚本文件放至/usr/local/openresty/nginx/lua

lua脚本文件详见附件


3 MC配置

3.1 修改mc环境变量

添加:mc_nginx_server=openresty的地址,用于mc自升级访问的根路径

tips:mc6.0及以上的版本默认将高级配置信息隐藏了,可以通过在mc的环境变量上添加配置:isShowAdvancedParamsPanel=true


3.2 修改补丁仓库配置

补丁仓库URL:修改为openresty的补丁仓库地址,用于给苍穹下载补丁文件使用

补丁仓库路径:修改为openresty能访问的系统绝对路径,用于上传补丁包的路径



3.3 修改集群配置信息

修改集群配置中应用仓库路径、静态资源路径

应用仓库路径:修改为openresty能访问到的系统绝对路径,用于更新应用仓库文件;

应用仓库地址:修改为APPSTORE_URL的地址,用于同步开发资源给开发人员下载使用;



静态资源路径:修改为openresty能访问到的系统绝对路径,用于更新静态资源文件;



高级配置信息:

mc.upload.server: openresty服务地址,用于上传补丁时的根路径

mc.upload.rootpath: openresty提供appstore和静态资源地址的系统根路径



以上配置好之后就可以通过openresty方式上传和更新补丁了。

Tips:6.0的mc版本默认取消了高级配置信息的显示,可在mc的环境变量中配置isShowAdvancedParamsPanel=true显示出来。


4 附录:容器运行openresty方式

可从hub.docker.com官网拉取镜像

# docker pull docker.io/openresty/openresty:latest

tips:容器方式需要将补丁仓库和应用仓库静态资源部署在一起,且容器需要挂载持久化卷


4.1 镜像优化

官方的openresty镜像缺少unzip命令,需要基于该官方镜像将unzip命令装载进去并重新制作成新的镜像

Dockerfile内容如下,(可在附件的文档中获取到Dockerfile和命令文件):

FROM docker.io/openresty/openresty:latest
 
ADD vi /bin/vi
ADD unzip /bin/unzip
ADD zip /bin/zip
ADD telnet /bin/telnet
ADD wget /bin/wget
ADD libtinfo.so.5 /usr/lib/libtinfo.so.5
ADD libncurses.so.5 /usr/lib/libncurses.so.5

说明:添加了unzip、zip、wget、telnet、vi等命令,其中unzip命令是必须的,用于解压补丁或解压缩静态资源文件,其他命令便于日常运维时分析问题



需要在装有docker服务的机器上(如k8snode节点)构建镜像:

# docker build -t 镜像地址:镜像版本 Dockerfile路径

 

制作好镜像后,如果有镜像仓库,可以修改tag后推送镜像仓库。

# docker tag 镜像地址:镜像版本 镜像仓库地址/openresty:镜像版本
# docker login -u 用户名 镜像仓库地址
# docker push 镜像仓库地址/openresty:镜像版本


如果没有镜像仓库,则需要将该镜像导出并导入到所有k8snode节点上

# docker save 镜像地址:镜像版本 > 镜像文件名.tar
将镜像拷贝到其他k8snode节点上后
# docker load -i 镜像文件名.tar


4.2 配置openresty容器服务

(1)配置configMap

将nginx.conf、mkdir.lua、rm.lua、mv.lua、unzip.lua、upload.lua、cp.lua文件通过configMap方式挂载到容器中去



(2)配置加载configMap



(3)配置持久化存储,用于上传补丁包至补丁仓库、更新应用仓库、更新静态资源




(4)配置clusterIP集群内部访问



(5)检测服务信息

启动openresty容器服务后,可登录容器检查信息,查看nginx的编译模块信息: /usr/local/openresty/nginx/sbin/nginx -V



查看挂载到容器的configMap文件内容



查看nfs挂载的补丁仓库、应用仓库、静态资源目录



到mc容器去访问openresty地址检测连通性



4.3 MC配置修改

与上文修改mc配置一样,需要将openresty的地址修改为容器内部访问地址


 



上传补丁测试,查看日志



相关附件下载:

openresty_补丁更新方法-v1.4.docx

lua.zip    更新日期:2024-08-12

docker_openresty_add_unzip.zip

使用OpenResty实现苍穹补丁更新

1 背景说明因客户的安全规范要求,服务器不提供ssh连接方式,这将导致苍穹默认的升级补丁方式无法正常使用(K8S无法ssh连接nginx服务器),...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息