使用openresty开发可自定义动态分发的kubernetes负载均衡服务器.一
由于尚未请示领导是否开源,所以这里我仅仅对实现过程和原理进行讲解.第一步我们要对技术实现方案做思考.思考大概步骤,中间是否有无法实现的部分,否则最后发现做不出来就糗大了.我们预期需要实现的功能为,根据需要可动态的分发到指定后端集群,不只能匹配路径,host,只要http协议内数据都能作为判断条件.我们还希望这些判断条件是可以动态修改且不要重启也不要reload实现改变获取k8s里集群容器由于目前还
由于尚未请示领导是否开源,所以这里我仅仅对实现过程和原理进行讲解.
第一步我们要对技术实现方案做思考.
思考大概步骤,中间是否有无法实现的部分,否则最后发现做不出来就糗大了.
我们预期需要实现的功能为,根据需要可动态的分发到指定后端集群,不只能匹配路径,host,只要http协议内数据都能作为判断条件.我们还希望这些判断条件是可以动态修改且不要重启也不要reload实现改变
- 获取k8s里集群容器
由于目前还没有lua版本的k8s客户端库,所以要理解k8sapi接口具体调用过程,使用lua包装出一个库来使用,
初期可能需求并不高,使用http库简单封装一层,简化调用过程
调用方式除了使用k8s的http协议api,其实还有个更原始的方式调用接口,那就是用shell脚本执行kubelet命令完成对应操作.用lua的os库执行这个shell命令
所以获取k8s集群中数据是可行的,对于复杂的api我们使用shell命令调用kubelet命令,为了通用性尽量少用shell脚本完成
为了减小调用k8s接口的频率,因为假设你有很多个负载均衡服务,频繁调用接口也会对k8s集群有影响的.所以需要研究which接口的调用过程然后写对应的lua库
- 使用openresty进行动态集群分发
由于k8s的Ingress使用nginx的配置文件reload会有短暂的服务能力下降,并且无法进行动态集群分发,所以对于入口的管理功能较弱,我们需要实现更强的入口功能,使用openresty将使得负载均衡服务器变成一个可编程的服务器.且性能强大.
使用ngx.balancer库可以动态设置后端集群,当然这个库是非常底层的,像一些轮询算法,重试策略,集群容错还是要自己去丰富的
做一个http协议接口实现可对负载均衡服务器配置或者参数进行调整
我们还应该做一个请求匹配的库,用来匹配特定请求分发到特定的后端集群,然后用上面做的接口来进行在线动态改变匹配条件.实现真正意义上的动态分发
- 对程序程序进行容器化包装,可以按需启动负载均衡服务器个数和扩缩.
后面我会最其中细节逐渐讲解...
更多推荐
所有评论(0)