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

mob604756f0bbf4 · · 906 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

1.什么是 Kubernetes Ingress

Kubernetes Ingress 是⼀个标准,Kubernetes 为了能够让外部请求访问到 Kubernetes 集群内部,并且⽅便集中管理⼊⼝流量,因此有了 Ingress 的概念。我们可以把 Ingress 简单的理解为Kubernetes 集群的⼊⼝⽹关,Ingress 可以提供 Load Balancer、SSL termination 等能⼒。

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

如图所示,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 等⾃定义资源。详细结构如下图。

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

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 可以抽象出适合⾃⼰业务场景的逻辑,定义出可以复⽤的插件

  • 活跃的社区是⼀起的基础

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

使⽤示例

ApisixRoute 资源定义示例

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

主体路由分为两个部分,⼀个是 spec.http.match,另⼀个是 backends。

spec.http.match:

  • 定义路由规则,可以指定 host / URI / method 等基础规则,

  • 同时还⽀持⾃定义表达式 exprs,你可以指定 headers / querystring / cookies 等作为匹配规则。示例中的 expr 就是⼀个 匹配 chrome 请求的规则。

spec.http.backends:

  • 满⾜匹配条件 match 的流量,将指派给指定的后端服务集合

  • ⽀持权重配置

关于插件扩展配置,采⽤ spec.http.plugins:

安装部署

使⽤ 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

⽀持各⼤平台安装

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

案例介绍

思必驰是⼀家语⾳ AI 公司,专注智能硬件的语⾳交互,打造实⽤、有趣的⼈机交互体验,涉及 “智能⻋载”,“智能家居”,“智能机器⼈” 等多个领域。案例中展示了⼀个使⽤ APISIX Ingress 跨集群的部署⽅式。

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

继续发⼒的⽅向

Apache apisix-ingress-controller 将继续在易⽤性上做持续探索,并且逐步暴露更多的 APISIX 特性给⼤家使⽤。另外,Apache apisix-ingress-controller ⽬前属于 Apache 孵化项⽬,期待今年能够毕业,欢迎⼤家参与。


有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:mob604756f0bbf4

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

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

906 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传