首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache APISIX Ingress Controller 正式加入 ASF

Apache APISIX Ingress Controller 正式加入 ASF

作者头像
Jintao Zhang
发布2020-12-14 10:10:15
1.4K0
发布2020-12-14 10:10:15
举报
文章被收录于专栏:MoeLoveMoeLove

云原生时代,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 的上游服务。

apiVersion: apisix.apache.org/v1
kind: ApisixRoute
metadata:
  name: foo-route
spec:
  rules:
  - host: foo.apisix.apache.org
    http:
      paths:
      - backend:
          serviceName: foo
          servicePort: 8080
        path: /hello*

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

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

piVersion: apisix.apache.org/v1
kind: ApisixRoute
metadata:
  name: foo-route
spec:
  rules:
  - host: foo.apisix.apache.org
    http:
      paths:
      - backend:
          serviceName: foo
          servicePort: 8080
        path: /hello*
  plugins:
  - enable: true
    name: proxy-rewrite
    config:
      regex_uri:
      - '^/(.*)'
      - '/extend/$1'
      scheme: http
      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。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MoeLove 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Apache APISIX Ingress Controller 是什么
    • 什么是 Ingress
      • 为什么实现 Apache APISIX Ingress Controller
      • Apache APISIX Ingress Controller 典型应用场景
      • 示例
      • 未来规划
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档