cookie-transformer
<p class="shortdesc">用户需要根据Cookie或者Header中的值做灰度策略,但是Cookie或Header中的值是加密的数据,真实的值是保存在Redis中。通过此插件可以将Redis中的值读取出来,并且写入到header中,提供给灰度代理判断使用。</p>
<section class="section" id="cookie-transformer__section_cdp_lwc_fsb"><h2 class="doc-tairway">配置说明</h2>
<div class="p">
<table class="table" id="cookie-transformer__table_u3s_mwc_fsb"><caption></caption><colgroup><col style="width:23.861171366594363%"><col style="width:21.69197396963124%"><col style="width:54.4468546637744%"></colgroup><thead class="thead">
<tr class="row">
<th class="entry align-left" id="cookie-transformer__table_u3s_mwc_fsb__entry__1">参数名</th>
<th class="entry align-left" id="cookie-transformer__table_u3s_mwc_fsb__entry__2">类型</th>
<th class="entry align-left" id="cookie-transformer__table_u3s_mwc_fsb__entry__3">参数说明</th>
</tr>
</thead><tbody class="tbody">
<tr class="row">
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">rule</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">string</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">值从哪里获取。只可以是cookie或者header</td>
</tr>
<tr class="row">
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">rule_key</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">array</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">即读取的Cookie Key或者header
Key的列表,按第一个读取到的数据为准。<strong class="ph b">2.0.3版本是string类型,只支持一个。</strong></td>
</tr>
<tr class="row">
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">rule_cache_timeout</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">number</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">本地缓存时间(单位为秒)。默认为0即不缓存到本地。</td>
</tr>
<tr class="row">
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">whitelist</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">array</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">即哪些URI需要执行后续的逻辑,支持正则表达式匹配。<strong class="ph b">2.0.4版本开始支持</strong></td>
</tr>
<tr class="row">
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">blacklist</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">array</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">即哪些URI不需要执行后续的逻辑,支持正则表达式匹配。<strong class="ph b">2.0.4版本开始支持</strong></td>
</tr>
<tr class="row">
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">redis_method</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">string</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">默认为hget,即从hash中读取,也可以是get,即直接读取</td>
</tr>
<tr class="row">
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">redis_key_pre</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">string</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">key值的前缀,即从redis中读取数据的Key为redis_key_pre+rule_key的值+redis_key_post</td>
</tr>
<tr class="row">
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">redis_key_post</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">string</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">key值的后缀,即从redis中读取数据的Key为redis_key_pre+rule_key的值+redis_key_post</td>
</tr>
<tr class="row">
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">redis_hash_fields</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">array</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">当redis_method=hget时可用,即从哪几个字段中读取数据。如果存在多个字段则按{field1_value}:{field2_value}这个格式写入header</td>
</tr>
<tr class="row">
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__1 ">redis_cluster</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__2 ">array</td>
<td class="entry align-left" headers="cookie-transformer__table_u3s_mwc_fsb__entry__3 ">redis集群节点配置</td>
</tr>
</tbody></table>
</div>
<div class="p"><strong class="ph b">缓存大小说明</strong><ul class="ul" id="cookie-transformer__ul_bzh_pwc_fsb">
<li class="li">2.0.6-1 之前版本默认最大支持到8W key,2.0.6-1版本修改了默认内存配置,默认最大可支持100W Key。</li>
<li class="li">如果需要修改支持Key大小可以添加启动环境变量 (如下是2.0.6-1
默认值,请在部署时预留相应内存)。<p class="p">KONG_CACHE_SIZE_ROUTE_RULE=300m</p><p class="p">KONG_CACHE_SIZE_REDIS_STATUS=300m</p></li>
</ul></div>
<p class="p"><strong class="ph b">Key/Value测试数据示例</strong></p>
<p class="p">KEY = mo:login:session:039afee1-0bca-43b7-8c44-94631026f5d9:personDetail</p>
<p class="p">VALUE = 039afee1-0bca-43b7-8c44-94631026f5d9</p>
</section>
<section class="section" id="cookie-transformer__section_onb_1xc_fsb"><h2 class="doc-tairway">示例</h2>
<p class="p">按如下配置,则具体执行逻辑为:</p>
<ol class="ol" id="cookie-transformer__ol_czg_bxc_fsb">
<li class="li">从cookie中读取pamo_session的值。</li>
<li class="li">检查缓存中是否已缓存值,存在则设置header,pamo_session_gray={具体值}。</li>
<li class="li">生成redis_key,redis_key_pre+{具体值}+redis_key_post,即“mo:login:session:test:personDetail”。</li>
<li class="li">从redis中获取值,并写入到缓存中。</li>
<li class="li">设置header,pamo_session_gray={具体值}。</li>
</ol>
<p class="p">后续可以在代理服务模块设置根据header做路由规则匹配。pamo_session_gray={具体值}</p>
<pre class="pre codeblock" id="cookie-transformer__codeblock_tmv_dxc_fsb"><code>{
"redis_method": "hget",
"redis_key_pre": "pre:",
"redis_key_post": ":post",
"rule_cache_timeout": 30,
"redis_hash_fields": [
"um"
],
"rule": "cookie",
"rule_key": [
"sessionkey"
],
"whitelist": [
"/login","/user_info"
],
"blacklist": [
"/loginV1/.+","/user_infov1/.+"
],
"redis_cluster": [
{
"redis_port": 16001,
"redis_password": "******",
"redis_host": "1.1.1.1",
"redis_timeout": 2000,
"redis_database": 0
},
{
"redis_port": 16002,
"redis_password": "******",
"redis_host": "1.1.1.1",
"redis_timeout": 2000,
"redis_database": 0
}
]
}</code></pre>
</section>
<section class="section" id="cookie-transformer__section_jck_2xc_fsb"><h2 class="doc-tairway">使用小贴士</h2>
<p class="p">默认插件是不开启本地缓存的,因为本地缓存会占用一定内存量。(默认只是开放了20m)</p>
<p class="p">如果需要使用缓存,并且缓存量比较大,可以通过环境变量KONG_CACHE_ROUTE_RULE=100m来增大缓存。</p>
</section>
提交成功!非常感谢您的反馈,我们会继续努力做到更好!