本文由“GO开源说”第六期 《基于Apache APISIX构建的Kubernetes Ingress》直播内容修改整理而成,视频内容较长,本文内容有所删减和重构。
1.什么是 Kubernetes Ingress
Kubernetes Ingress 是⼀个标准,Kubernetes 为了能够让外部请求访问到 Kubernetes 集群内部,并且⽅便集中管理⼊⼝流量,因此有了 Ingress 的概念。我们可以把 Ingress 简单的理解为Kubernetes 集群的⼊⼝⽹关,Ingress 可以提供 Load Balancer、SSL termination 等能⼒。
如图所示,Ingress 负责接收 Kubernetes 集群边缘⼊⼝流量。Ingress 的实现⼀般包含两个部分,⼀个是与 Kubernetes 打交道的 Ingress Controller ,属于控制⾯( Controller Plane),另⼀部分是⽹关,⽤于反向代理,属于数据⾯(Data Plane)。APISIX Ingress 就是基于 Apache APISIX (DP),加上 APISIX Ingress Controller (CP),为 Kubernetes 提供了⼀种全新的 Ingress 选择。
2.APISIX Ingress Controller
特性Apache APISIX Ingress 监听 Kubernetes 集群资源的变化,并且将这些资源转换为内部结构,与历史资源对⽐,并且将增量变化同步到 APISIX ⽹关。监听的资源包括 Secret、Endpoints、Ingress 等原⽣资源,同时也包括 ApisixRoute、ApisixUpstream、ApisixTls 等⾃定义资源。详细结构如下图。
Apache APISIX 作为云原⽣、⾼性能 API ⽹关,有很多令⼈兴奋的特性,APISIX Ingress Controller 将 APISIX 的特性通过 声明式配置 逐步暴露出来,⽬前⽀持的主要特性如下:
-
全动态:路由、SSL 证书、上游、插件…
-
⽀持 Custom Resource Defifinitions,更容易理解的声明式配置
-
⽀持 原⽣ ingress 配置 (v1 / v1beta1 )
-
服务⾃动注册,⽆惧服务伸缩
-
得益于 pod IP 的更有灵活的负载均衡策略
-
健康检查开箱即⽤
-
⽀持⾼级路由匹配规则
-
⽀持流量切分 (业务流量管控、灰度升级必不可少)
-
⽀持 Apache APISIX 官⽅40 多个插件 & 客户⾃定义插件
- APISIX Ingress Controller ⾃身⾼可⽤
全动态配置、更容易理解的声明式配置、服务注册、负载均衡、⽀持流量管理 是 Ingress 的常⽤特性。
为了⽅便使⽤ Nginx Ingress 的⽤户,也兼容 Kubernetes 原⽣ Ingress Resource 配置。Apache APISIX Ingress 继承了 APISIX 的扩展能⼒,默认⽀持了 40 多个官⽅插件。同时⽀持⽤户⾃定义插件的声明式配置⽅式,所要做的仅仅是在 声明式配置中,按照插件的 schema 定义即可。(会有使⽤示例)
与 Kubernetes Nginx Ingress 相⽐,我们有哪些优势
- 全动态配置
Apache APISIX 的动态配置特性,避免了因为 nginx reload 对系统造成的影响
- 更易⽤的声明式配置
避免在复杂场景下使⽤ annotation 定义代码⽚段,出现难以维护的情况
- ⽅⾯易⽤的扩展能⼒
得益于 APISIX ⽅便的 插件 扩展能⼒,APISIX Ingress 可以抽象出适合⾃⼰业务场景的逻辑,定义出可以复⽤的插件
- 活跃的社区是⼀起的基础
使⽤示例
ApisixRoute 资源定义示例
主体路由分为两个部分,⼀个是 spec.http.match,另⼀个是 backends。
spec.http.match:
-
定义路由规则,可以指定 host / URI / method 等基础规则,
- 同时还⽀持⾃定义表达式 exprs,你可以指定 headers / querystring / cookies 等作为匹配规则。示例中的 expr 就是⼀个 匹配 chrome 请求的规则。
spec.http.backends:
-
满⾜匹配条件 match 的流量,将指派给指定的后端服务集合
- ⽀持权重配置
关于插件扩展配置,采⽤ spec.http.plugins:
-
定义插件集合
-
通过 enable 快速启⽤ 或者 弃⽤
- 通过 confifig 配置插件,confifig 的配置依据是 Apache APISIX 插件的 schema 定义。以示例中的 proxy-rewrite 插件为例,配置⽂档参考:https://github.com/apache/apisix/blob/master/docs/en/latest/plugins/proxy-rewrite.md#attributes。
安装部署
使⽤ helm 安装
$ helm repo add apisix https://charts.apiseven.com
$ helm search repo apisix
$ helm repo update
$ helm install my-ingress apisix/apisix-ingress-controller
如果对 helm chart 的配置感兴趣,这是 helm chart 的仓库地址:https://github.com/apache/apisix-helm-chart
⽀持各⼤平台安装
案例介绍
思必驰是⼀家语⾳ AI 公司,专注智能硬件的语⾳交互,打造实⽤、有趣的⼈机交互体验,涉及 “智能⻋载”,“智能家居”,“智能机器⼈” 等多个领域。案例中展示了⼀个使⽤ APISIX Ingress 跨集群的部署⽅式。
继续发⼒的⽅向
Apache apisix-ingress-controller 将继续在易⽤性上做持续探索,并且逐步暴露更多的 APISIX 特性给⼤家使⽤。另外,Apache apisix-ingress-controller ⽬前属于 Apache 孵化项⽬,期待今年能够毕业,欢迎⼤家参与。
有疑问加站长微信联系(非本文作者)