基于 Apache APISIX 的具体实践
基于 OpenShift 部署
OpenShift 具有非常严格的 SCC 机制,在利用 OpenShift 去部署 Apache APISIX 时遇到了很多问题,所以每次发版都要重新去做编译。
另外基于 Apache APISIX 提供的 Docker 镜像功能,我们将日常的一些基础软件进行了更新,比如调优和问题查看,通过 Image Rebuild 功能上传到内部镜像仓库。
跨版本平滑处理
我们一开始使用的 Apache APISIX 为 1.5 版本,在更新到最新版本的过程中,我们经历了类似 etcd v2 版本性能下降、增加了 CORS 插件强校验等情况。
基于此,我们采取了版本切流的方案,新版本启用并创建新的 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 的版本更迭中可以进行相关功能的支持或完善。比如:
- 技术管理层面进行多集群功能的添加
- 开发层面进行更细粒度的用户权限管理
- 功能层面支持 SSL 证书滚动更新
- Apache APISIX-Ingress-Controller 相关业务接入
关于作者
孙冉,运维专家。目前就职于小电平台架构部,主要负责 K8s 集群和 API 网关的相关部署。
关于 Apache APISIX
Apache APISIX 是一个动态、实时、高性能的开源 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。Apache APISIX 可以帮忙企业快速、安全的处理 API 和微服务流量,包括网关、Kubernetes Ingress 和服务网格等。
- Apache APISIX GitHub:https://github.com/apache/apisix
- Apache APISIX 官网:https://apisix.apache.org/
- Apache APISIX 文档:https://apisix.apache.org/zh/docs/apisix/getting-started
往期推荐: