kong 自定义插件access中获取真实代理的target

这个标题真的很难起,我在产生这个需求的时候,真是各种方式搜索了各种平台,都没有找到答案。最终在硬磕了几天之后,终于在kong源码中找到了解决方案。于是,我决定把我遇到的这个问题记录下来,但是,这个时候困扰我的就是,标题该如何定,才能容易被搜索到。

需求:

在kong的插件中,我要获取到真实代理的target,就是要找到最终请求IP和port,然后由我发送请求到这些IP上,不走nginx的代理了。

这真是奇葩的需求,但这需求还真不少!!

需求了解清楚了之后,就是要如何解决了,当了解方案之后,回过来看,就是我自己走一遍负载均衡那一套,最终获取到一个代理目标target。

说起来简单,但实现起来可是真难啊。不过,kong帮助我们实现好了,我们之后调用kong的api就可以了。不多说,代码如下:


local kong = kong
local ngx = ngx

local runloop = require("kong.runloop.handler");

local MyTestPlugin = {
  PRIORITY = 1000,
  VERSION = "1.0.0",
}

-- 生命周期函数
function MyTestPlugin:access(conf)
  
  -- 获取到代理的真实target
  runloop.access.after(ngx.ctx);
  
  local balancer_data = ngx.ctx.balancer_data;
  
  for k,v in pairs(balancer_data) do
	print(k .. ":" .. v);
  end;
  
end


return MyTestPlugin

有了上面的代码,懂的朋友自然就懂了。

在balancer_data中,就有封装好了的真是代理的IP和端口。

host: 这个是kong配置的service名称 user-service

port:代理的真实端口 8899

hostname:代理真是的主机IP 192.168.4.3

取到这个真实代理的IP之后,后面的操作就简单了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值