Go 开源说第六期:基于Apache APISIX构建的Kubernetes Ingress

GoCN

共 2905字,需浏览 6分钟

 ·

2021-04-03 20:10


点击蓝字

关注我们


本文由“GO开源说”第六期 《基于Apache APISIX构建的Kubernetes Ingress》直播内容修改整理而成,视频内容较长,本文内容有所删减和重构。



1.什么是 Kubernetes Ingress


Kubernetes Ingress 是⼀个标准,Kubernetes 为了能够让外部请求访问到 Kubernetes 集群内部,并且⽅便集中管理⼊⼝流量,因此有了 Ingress 的概念。我们可以把 Ingress 简单的理解为Kubernetes 集群的⼊⼝⽹关,Ingress 可以提供 Load BalancerSSL 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 ⽹关。监听的资源包括 SecretEndpointsIngress 等原⽣资源,同时也包括 ApisixRouteApisixUpstreamApisixTls 等⾃定义资源。详细结构如下图。

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 孵化项⽬,期待今年能够毕业,欢迎⼤家参与。


往期回顾

Go 开源说第七期:Harbor助你玩转云原生

Go 开源说第五期:MOSN Go语言网络代理软件

Go 开源说第四期(下):go-zero缓存管理最佳实践



浏览 38
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报