由于尚未请示领导是否开源,所以这里我仅仅对实现过程和原理进行讲解.


第一步我们要对技术实现方案做思考.

思考大概步骤,中间是否有无法实现的部分,否则最后发现做不出来就糗大了.

我们预期需要实现的功能为,根据需要可动态的分发到指定后端集群,不只能匹配路径,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协议接口实现可对负载均衡服务器配置或者参数进行调整

  我们还应该做一个请求匹配的库,用来匹配特定请求分发到特定的后端集群,然后用上面做的接口来进行在线动态改变匹配条件.实现真正意义上的动态分发


  • 对程序程序进行容器化包装,可以按需启动负载均衡服务器个数和扩缩.


后面我会最其中细节逐渐讲解...







Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐