Kubernetes部署apisix的理论与最佳实践(一)
#作者: stackofumbrella
文章目录
- 简介
- 主要特性
- Apache APISIX的架构
- APISIX的生态
- APISIX的主要概念和组件
- Apache APISIX Ingress概览
简介
Apache APISIX是Apache软件基金会下的云原生API网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认证、可观测性等丰富的流量管理功能。可以使用Apache APISIX来处理传统的南北向流量,也可以处理服务间的东西向流量。同时,它也支持作为K8s Ingress Controller来使用。
主要特性
多平台支持:APISIX提供了多平台解决方案,它不但支持裸机运行,也支持在Kubernetes中使用,还支持与AWS Lambda、Azure Function、Lua函数和Apache OpenWhisk等云服务集成。
全动态能力:APISIX支持热加载,这意味着不需要重启服务就可以更新APISIX的配置。Apache APISIX选择Nginx + Lua这个技术栈实现此原理。
精细化路由:APISIX支持使用NGINX内置变量做为路由的匹配条件,可以自定义匹配函数来过滤请求,匹配路由。
运维友好:APISIX支持与以下工具和平台集成:HashiCorp Vault、Zipkin、Apache SkyWalking、Consul、Nacos、Eureka。通过APISIX Dashboard,运维人员可以通过友好且直观的UI配置APISIX。
多语言插件支持:APISIX支持多种开发语言进行插件开发,开发人员可以选择擅长语言的SDK开发自定义插件。
Apache APISIX的架构
APISIX的生态
从该图可以准确看到目前都支持了哪些周边生态。左侧是支持的协议,可以看到常见的7层协议有HTTP(S)、WebSockets、gRPC、HTTP/2、Dubbo、QUIC和物联网协议MQTT等,此外它还支持HTTP到gRPC的转换,4层协议有TCP/UDP。右侧部分则是一些开源或SaaS服务,比如SkyWalking、Prometheus 、Vault等。下面就是一些比较常见的操作系统环境、云厂商和硬件环境,也支持ARM64等更丰富的平台。
APISIX的主要概念和组件
Route:通过路由定义规则来匹配客户端请求,根据匹配结果加载并执行相应的插件,最后把请求转发给到指定的上游应用。
Upstream:上游的作用是按照配置规则对服务节点进行负载均衡,它的地址信息可以直接配置到路由或服务上。
Admin API:用户可以通过Admin API控制APISIX实例。
Apache APISIX Ingress概览
在K8S生态中,Ingress作为表示K8S流量入口的一种资源,想要让其生效,就需要有一个Ingress Controller去监听K8S中的Ingress资源,并对这些资源进行相应规则的解析和实际承载流量。在当下趋势中,像Kubernetes Ingress Nginx就是使用最广泛的Ingress Controller实现。
而APISIX Ingress则是另一种Ingress Controller的实现。跟Kubernetes Ingress Nginx的区别主要在于APISIX Ingress是以Apache APISIX作为实际承载业务流量的数据面。如下图所示,当用户请求到具体的某一个服务/API/网页时,通过外部代理将整个业务流量/用户请求传输到K8S集群,然后经过APISIX Ingress进行后续处理。
从图中可以看到,APISIX Ingress分成了两部分。一部分是APISIX Ingress Controller,作为控制面它将完成配置管理与分发。另一部分APISIX Proxy Pod负责承载业务流量,它是通过CRD(Custom Resource Definitions)的方式实现的。Apache APISIX Ingress除了支持自定义资源外,还支持原生的 K8s Ingress资源。