searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

定制化json配置校验说明

2023-08-02 07:16:47
23
0

一、json配置校验必要性

现如今网关配置多采用热加载架构,即线上配置随时更新,而无需reload。在该背景下,使用json格式呈现的配置文件无法第一时间知道配置方式是否有误。极端情况下,客户请求的过程中暴露出问题,导致5XX、宕机等问题,从而影响整个节点的服务质量。由此,预先的json配置校验就变得非常必要。

二、网关json配置校验方案简述

独立一组机器作为中心校验节点,该节点的环境与线上保持一致(同步升级与回退),由配置平台在下发配置之前,将整个json配置文件发送请求到中心校验节点的网关特定接口,由网关告知平台这些变量是否都合法,若是都合法,则回复“0”,不合法则回复“1”,且返回那些不合法的变量的说明。网关根据json解析到的lua模块,调用check函数进行配置校验。

三、校验接口概述

采用中心校验的方式,配置平台在下发配置之前,将全量的json配置整合后发送到网关json配置校验接口。网关解析json配置,根据解析到的lua模块名称,以对应的json配置作为入参,调用该模块对应的check函数。网关将所有check函数的调用结果进行整合,以json形式响应给配置平台。

注:若是未检测到check函数,则直接跳过该lua模块的校验。

四、json配置拼接示例

[
    {
        "server_name":"server1.com",
        "level":1,
        "data":{
            "ports":{
                "80":"1",
                "443":"1"
            },
            "server_name":"server1.com",
            "ssl_certificate":"server.crt",
            "ssl_certificate_key":"server.key",
            "http2":"on",
            "locations":[
                {
                    "/":{
                        "internal":"0",
                        "plugin_lua_functions":{
                            "req_rewrite":[
                                [
                                    "set_vars",
                                    {
                                        "set_var_list":{
                                            "&gzip":"on",
                                            "&gzip_min_length":"1k",
                                            "&gzip_types":"text/xml text/plain text/css application/javascript application/x-javascript text/javascript application/json"
                                        }
                                    }
                                ],
                                [
                                    "set_vars",
                                    {
                                        "set_var_list":{
                                            "proxy_buffer_size":"32k"
                                        }
                                    }
                                ],
                                [
                                    "set_vars",
                                    {
                                        "set_var_list":{
                                            "proxy_buffers":"4 32k"
                                        }
                                    }
                                ]
                            ]
                        }
                    }
                }
            ]
        }
    },
    {
        "server_name":"server2.com",
        "level":2,
        "data":{
            "ports":{
                "80":"1",
                "443":"1"
            },
            "server_name":"server2.com",
            "locations":[
                {
                    "/":{
                        "internal":"0",
                        "plugin_lua_functions":{
                            "req_rewrite":[
                                [
                                    "set_vars",
                                    {
                                        "set_var_list":{
                                            "proxy_buffer_size":"32k"
                                        }
                                    }
                                ],
                                [
                                    "set_vars",
                                    {
                                        "set_var_list":{
                                            "proxy_buffers":"4 32k"
                                        }
                                    }
                                ]
                            ]
                        }
                    }
                }
            ]
        }
    },
    ...
]

五、配置校验相应示例

{

    "res":"0" / "1",

    "details":{} / [
               {
                    "server_name":"server1.com",
                    "level":1/2/3
                    "detail":[
                        {
                            "func_name":"set_vars",
                            "fail_msg":"Missing conf :set_var_list",
                            "phase":"req_rewrite"
                        },
                        {
                            "origin_code":"hhhh:...",
                            "func_name":"set_vars",
                            "fail_msg":"Configuration is invalid",
                            "phase":"req_rewrite"
                        }
                    ]
                },
               {
                    "server_name":"server2.com",
                    "level":1/2/3
                    "detail":[
                        {
                            "func_name":"set_vars",
                            "fail_msg":"Module configuration is missing",
                            "phase":"req_rewrite"
                        }
                    ]
                }
                 ... ...
             ]
} 

具体如下:

①校验不含非法配置:

       res字段显示"0",details字段为{}

②校验含非法配置:

       res字段显示"1",details字段为不合法的配置的详细信息,包括字段:server_name、leveldetail和fail_msg字段:

             server_name:选填,不合法配置所属的域名

             level:选填,不合法配置所属的层级,level数值和对应含义如下:

                       1:边缘层,2:中间层,3:回源层

             detail:选填,不合法配置清单,该字段内又包括以下四个字段:

                      phase:不合法配置所属的lua执行阶段

                      func_name:不合法配置所属的lua模块

                      origin_code:不合法的具体配置

                      fail_msg:不合法的原因

             fail_msg:选填,不合法的原因

 

六、结语

配置平台根据校验结果,调整下发策略,实现智能化下发等。

0条评论
作者已关闭评论
yyyye
4文章数
0粉丝数
yyyye
4 文章 | 0 粉丝
原创

定制化json配置校验说明

2023-08-02 07:16:47
23
0

一、json配置校验必要性

现如今网关配置多采用热加载架构,即线上配置随时更新,而无需reload。在该背景下,使用json格式呈现的配置文件无法第一时间知道配置方式是否有误。极端情况下,客户请求的过程中暴露出问题,导致5XX、宕机等问题,从而影响整个节点的服务质量。由此,预先的json配置校验就变得非常必要。

二、网关json配置校验方案简述

独立一组机器作为中心校验节点,该节点的环境与线上保持一致(同步升级与回退),由配置平台在下发配置之前,将整个json配置文件发送请求到中心校验节点的网关特定接口,由网关告知平台这些变量是否都合法,若是都合法,则回复“0”,不合法则回复“1”,且返回那些不合法的变量的说明。网关根据json解析到的lua模块,调用check函数进行配置校验。

三、校验接口概述

采用中心校验的方式,配置平台在下发配置之前,将全量的json配置整合后发送到网关json配置校验接口。网关解析json配置,根据解析到的lua模块名称,以对应的json配置作为入参,调用该模块对应的check函数。网关将所有check函数的调用结果进行整合,以json形式响应给配置平台。

注:若是未检测到check函数,则直接跳过该lua模块的校验。

四、json配置拼接示例

[
    {
        "server_name":"server1.com",
        "level":1,
        "data":{
            "ports":{
                "80":"1",
                "443":"1"
            },
            "server_name":"server1.com",
            "ssl_certificate":"server.crt",
            "ssl_certificate_key":"server.key",
            "http2":"on",
            "locations":[
                {
                    "/":{
                        "internal":"0",
                        "plugin_lua_functions":{
                            "req_rewrite":[
                                [
                                    "set_vars",
                                    {
                                        "set_var_list":{
                                            "&gzip":"on",
                                            "&gzip_min_length":"1k",
                                            "&gzip_types":"text/xml text/plain text/css application/javascript application/x-javascript text/javascript application/json"
                                        }
                                    }
                                ],
                                [
                                    "set_vars",
                                    {
                                        "set_var_list":{
                                            "proxy_buffer_size":"32k"
                                        }
                                    }
                                ],
                                [
                                    "set_vars",
                                    {
                                        "set_var_list":{
                                            "proxy_buffers":"4 32k"
                                        }
                                    }
                                ]
                            ]
                        }
                    }
                }
            ]
        }
    },
    {
        "server_name":"server2.com",
        "level":2,
        "data":{
            "ports":{
                "80":"1",
                "443":"1"
            },
            "server_name":"server2.com",
            "locations":[
                {
                    "/":{
                        "internal":"0",
                        "plugin_lua_functions":{
                            "req_rewrite":[
                                [
                                    "set_vars",
                                    {
                                        "set_var_list":{
                                            "proxy_buffer_size":"32k"
                                        }
                                    }
                                ],
                                [
                                    "set_vars",
                                    {
                                        "set_var_list":{
                                            "proxy_buffers":"4 32k"
                                        }
                                    }
                                ]
                            ]
                        }
                    }
                }
            ]
        }
    },
    ...
]

五、配置校验相应示例

{

    "res":"0" / "1",

    "details":{} / [
               {
                    "server_name":"server1.com",
                    "level":1/2/3
                    "detail":[
                        {
                            "func_name":"set_vars",
                            "fail_msg":"Missing conf :set_var_list",
                            "phase":"req_rewrite"
                        },
                        {
                            "origin_code":"hhhh:...",
                            "func_name":"set_vars",
                            "fail_msg":"Configuration is invalid",
                            "phase":"req_rewrite"
                        }
                    ]
                },
               {
                    "server_name":"server2.com",
                    "level":1/2/3
                    "detail":[
                        {
                            "func_name":"set_vars",
                            "fail_msg":"Module configuration is missing",
                            "phase":"req_rewrite"
                        }
                    ]
                }
                 ... ...
             ]
} 

具体如下:

①校验不含非法配置:

       res字段显示"0",details字段为{}

②校验含非法配置:

       res字段显示"1",details字段为不合法的配置的详细信息,包括字段:server_name、leveldetail和fail_msg字段:

             server_name:选填,不合法配置所属的域名

             level:选填,不合法配置所属的层级,level数值和对应含义如下:

                       1:边缘层,2:中间层,3:回源层

             detail:选填,不合法配置清单,该字段内又包括以下四个字段:

                      phase:不合法配置所属的lua执行阶段

                      func_name:不合法配置所属的lua模块

                      origin_code:不合法的具体配置

                      fail_msg:不合法的原因

             fail_msg:选填,不合法的原因

 

六、结语

配置平台根据校验结果,调整下发策略,实现智能化下发等。

文章来自个人专栏
网关网关
4 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
1
1