Apache APISIX 助力便利充电创领者小电,实现云原生方案(3)

基于 Apache APISIX 的具体实践


基于 OpenShift 部署


OpenShift 具有非常严格的 SCC 机制,在利用 OpenShift 去部署 Apache APISIX 时遇到了很多问题,所以每次发版都要重新去做编译。

另外基于 Apache APISIX 提供的 Docker 镜像功能,我们将日常的一些基础软件进行了更新,比如调优和问题查看,通过 Image Rebuild 功能上传到内部镜像仓库。


跨版本平滑处理


我们一开始使用的 Apache APISIX 为 1.5 版本,在更新到最新版本的过程中,我们经历了类似 etcd v2 版本性能下降、增加了 CORS 插件强校验等情况。


Apache APISIX 助力便利充电创领者小电,实现云原生方案(3)


基于此,我们采取了版本切流的方案,新版本启用并创建新的 Service 以及暴露相关 SLB 信息。通过 Service 的 Selector 属性,将 Gateway 切换到新版本的 Apache APISIX 中。另一方面我们也会将流量进行切分处理,将部分流量通过 DNS 解析到新版本 Apache APISIX SLB 地址,来实现版本更迭的平滑处理。


解决 etcd 压缩问题


在使用期间我们也观察到 Load 一直突高不下的情况,经检查发现 etcd 内的数据量已达到 600 多兆,所以我们采取了定期压缩 etcd 的措施,将历史事物数据全部清除。具体代码可参考:


获取 Client-IP


在线上业务场景中,我们需要获取到源 IP 去做相关的业务处理。刚好 Apache APISIX 提供了「X-Real-IP」的功能,通过配置 real_ip_header 和开启 externalTrafficPolicy 的 Local 模式进行相关获取操作。


未来期望


众所周知,小电现在是主做共享充电宝业务场景,所以在属性上也是偏物联网方向。

从业务层面出发,我们也还有一些重要业务比如 MQTT 类型的应用。目前它们在容器内还是以 SLB 模式去暴露的,希望后续也可以接入到整个 Apache APISIX 集群里。

从前端层面来讲,目前的前端应用还是部署在容器里,后续我们也打算将前端应用直接接入 Apache APISIX,通过 Proxy Rewrite 插件功能直接指向我们的阿里云 OSS 域名。这样可以节省容器部署的资源,进行更方便地管理。

在对 Apache APISIX 项目上,我们经过实践部署也产生了一些改进需求,希望后续 Apache APISIX 的版本更迭中可以进行相关功能的支持或完善。比如:


  1. 技术管理层面进行多集群功能的添加
  2. 开发层面进行更细粒度的用户权限管理
  3. 功能层面支持 SSL 证书滚动更新
  4. Apache APISIX-Ingress-Controller 相关业务接入


关于作者


孙冉,运维专家。目前就职于小电平台架构部,主要负责 K8s 集群和 API 网关的相关部署。


关于 Apache APISIX


Apache APISIX 是一个动态、实时、高性能的开源 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。Apache APISIX 可以帮忙企业快速、安全的处理 API 和微服务流量,包括网关、Kubernetes Ingress 和服务网格等。


Apache APISIX 助力便利充电创领者小电,实现云原生方案(3)



往期推荐:

上一篇:K8S从懵圈到熟练 – 集群服务的三个要点和一种实现


下一篇:【云吞铺子】时延敏感业务超时问题分析(二)