小言_互联网的博客

Apache APISIX Ingress Controller 正式加入 ASF

354人阅读  评论(0)

云原生时代,Ingress 作为Kubernetes集群中服务的入口,已经被大家所接受。除了Kubernetes默认的NGINX Ingress Controller(基于原生 NGINX)之外, 业界也有不少其他第三方的 Ingress Controller 的实现。Apache APISIX作为国内最快毕业的 Apache 顶级项目,实现了Apache APISIX Ingress Controller,为Kubernetes用户提供了功能更为便捷的 Ingress 实现。

Apache APISIX Ingress Controller 现在作为 Apache APISIX 子项目正式捐献到Apache Software Foundation(以下简称 ASF),与社区共同成长。

Apache APISIX Ingress Controller 是什么

什么是 Ingress

Ingress 是访问Kubernetes集群的入口,流量按 Ingress 资源指定的规则分发到集群内部的上游服务。

下面是一个示意图,客户端通过 Ingress 对外暴露的服务地址进行访问,流量在 Ingress 内部经过规则匹配,最后分发到对应的 service 上。

可以发现,Ingress 充当了 Kubernetes 集群入口网关的角色。

图片

为什么实现 Apache APISIX Ingress Controller

Kubernetes 默认的 Ingress 是基于 NGINX 实现的。NGINX Ingress Controller 帮助维护了 Kubernetes 集群与 NGINX 的状态同步,并且提供了基本的反向代理能力。

Apache APISIX Ingress Controller 基于 Apache APISIX, 集成Kubernetes的集群管理能力,支持使用 YAML 申明的方式动态配置入口流量的分发规则,绑定插件,并且支持服务发现、配置校验等能力。Apache APISIX Ingress Controller 将配置写入 Apache APISIX,由 Apache APISIX 承载业务流量。

Apache APISIX Ingress Controller 除了覆盖 NGINX Ingress Controller 已有的能力外,还解决了一些 Nginx Ingress Controller 的痛点。

1、动态加载配置,不再需要 reload

Ingress Controller 承载着服务的入口流量,在生产环境中,对可靠性有更高的要求。

NGINX Ingress Controller 将 YAML 配置文件转换为 nginx.conf,再触发 reload 使配置生效。生产环境中这是不能接受的,尤其在边缘流量采用⻓连接时,更容易导致事故。

Apache APISIX Ingress Controller 支持动态配置,即时生效。降低生产事故的风险,提高了运维可操作性。

2、强大的扩展能力

基于 Apache APISIX 强大的插件能力,Apache APISIX Ingress Controller 通过动态绑定插件来增强功能。

而 NGINX Ingress Controller 通过在 annotation 中增加大量的脚本片段来扩展 NGINX 的能力。这样的做法非常不易管理,生产环境中大量的脚本给运维人员带来极大困扰,极少的校验手段,也让每次改动都非常容易出错。

Apache APISIX 通过插件封装逻辑,易于管理;完善的文档,易于使用和理解。Apache APISIX Ingress Controller 通过配置即可绑定和解绑插件,无需操作脚本。

3、方便易用的灰度能力

业务服务常常需要调整权重,按比例控制流量。

Apache APISIX Ingress Controller 可以支持 service和 pod 级别的权重调整,配置清晰而且可读性更强。

在 NGINX Ingress Controller 中通过 annotation 的方式提供 canary 灰度方案,但有三个问题比较突出:

  • annotation 必须在 yaml 文件级别定义,这意味着每次需要调整权重就必须创建一个 yaml 配置文件。

  • canary annotations 之间存在优先级,只能按照既定优先级配置,限制了灵活性。

  • 如果后端服务数量大于两个,再想通过权重分配流量将变得十分困难。

Apache APISIX Ingress Controller 典型应用场景

Apache APISIX Ingress Controller 可以替换 NGINX Ingress Controller,使用更为便捷的配置方式,动态的调整网关配置。无需 reload nginx,配置实时生效。

典型应用场景如下图所示。

图片

Apache APISIX Ingress 对外提供访问Kubernetes集群的入口,用户通过外部负载均衡器访问到 Apache APISIX Ingress。流量经过 Apache APISIX 路由规则,分发到目标上游服务。

内部支持通过Kubernetesservice 或者Kubernetespod IP + Port 的方式访问上游服务,Apache APISIX Ingress Controller 集成Kubernetes,实现服务自动注册和发现,实时同步Kubernetes状态变更。

得益于 Apache APISIX 丰富的插件支持,可以通过绑定插件,轻松扩展 Ingress 的能力。比如,限流、熔断、灰度发布、跨域、用量管控、健康检查等。

甚至可以自定义插件,满足特殊业务场景。比如,配合 Apache APISIX Ingress Controller 的服务发现机制,实现自定义的负载均衡能力。

示例

一个简单的示例,通过 ApisixRoute 定义一个路由,指向端口是 8080 的上游服务。


   
  1. apiVersion: apisix.apache.org/v1
  2. kind: ApisixRoute
  3. metadata:
  4.   name: foo-route
  5. spec:
  6.   rules:
  7.   - host: foo.apisix.apache.org
  8.     http:
  9.       paths:
  10.       - backend:
  11.           serviceName: foo
  12.           servicePort:  8080
  13.         path: /hello*

当访问 foo.apisix.apache.org/hello 时,Apache APISIX Ingress 将会把请求转发到上游 foo 服务。

再来加个 proxy-rewrite 插件,实现转发给上游服务的同时修改 host 和 uri。


   
  1. piVersion: apisix.apache.org/v1
  2. kind: ApisixRoute
  3. metadata:
  4.   name: foo-route
  5. spec:
  6.   rules:
  7.   - host: foo.apisix.apache.org
  8.     http:
  9.       paths:
  10.       - backend:
  11.           serviceName: foo
  12.           servicePort:  8080
  13.         path: /hello*
  14.   plugins:
  15.   - enable:  true
  16.     name: proxy-rewrite
  17.     config:
  18.       regex_uri:
  19.       -  '^/(.*)'
  20.       -  '/extend/$1'
  21.       scheme: http
  22.       host: foo-beta.apisix.apache.org

更多使用方法请关注https://github.com/apache/apisix-ingress-controller。

未来规划

接下来,Apache APISIX Ingress Controller 将翻开新的篇章,在保证现有功能的稳定迭代的同时,后续也将支持 VM cluster 的部署方式,主要规划如下:

  • Support ApisixSSL CRD and the logic.#52

  • Support retry when synchronization.#59

  • Add a complete demo.#9

  • Use terratest for testing with Kubernetes.#51

  • 作为 VM Ingress,丰富服务注册/发现场景,比如,支持 Consul 等注册中心;

  • 支持 VM cluster 与Kubernetescluster 统一配置;

更多细节请关注项目issue。

关于 Apache APISIX 社区

Apache APISIX Ingress Controller 正式加入 ASF ,作为 Apache APISIX 子项目,与社区共同维护和成长。

邮件列表 - 发送任意内容到 dev-subscribe@apisix.apache.org 后,根据回复以订阅邮件列表。

QQ 群 -578997126(②群)

哔哩哔哩https://space.bilibili.com/551921247

欢迎大家参与讨论和贡献。

图片

转载:https://blog.csdn.net/tao12345666333/article/details/110914361
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场