Apisix-Ingress服务发现详解

Apache APISIX 是一个动态的API网关,支持动态配置和插件热加载。APISIX Ingress Controller作为Ingress Controller实现,提供动态配置加载、强大的灰度能力和扩展能力。内置多种服务发现机制,如Eureka、Nacos、Consul等,并支持Kubernetes服务发现。apisix ingress启动时会监听并处理K8s资源,实现自动服务发现。
摘要由CSDN通过智能技术生成

apisix

Apache APISIX 是一个基于微服务 API 网关,其不仅可以处理南北向的流量,也可以处理东西向的流量即服务之间的流量。Apache APISIX 集成了控制面板和数据面,与其他 API 网关相比,Apache APISIX 的上游、路由、插件全是动态的,修改这些东西时都不用重启。并且 Apache APISIX 的插件也是热加载,可以随时插拔、修改插件。

Apache APISIX 其设计理念是基于API 网关的数据平面和控制平面分离。控制平面不仅仅能够控制 Apache APISIX ,同时其还能够控制其他组件;数据平面不仅仅能够被自身的控制平面控制,还能被其他组件所控制。由于其基于ETCD 来存储和分发路由数据,默认具备高可用,无单点故障风险。除此之外,其能够友好地支持 Prometheus、SkyWalking 动态追踪、流量复制、故障注入等相关功能。

apisix ingress

在 K8s 生态中,Ingress 作为表示 K8s 流量入口的一种资源,想要让其生效,就需要有一个 Ingress Controller 去监听 K8s 中的 Ingress 资源,并对这些资源进行相应规则的解析和实际承载流量。在当下趋势中,像 Kubernetes Ingress Nginx 就是使用最广泛的 Ingress Controller 实现。

而 APISIX Ingress 则是另一种 Ingress Controller 的实现。跟 Kubernetes Ingress Nginx 的区别主要在于 APISIX Ingress 是以 Apache APISIX 作为实际承载业务流量的数据面。

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

  • 1、配置的动态化加载
    通常情况下,作为接入层的 Ingress Controller ,其承载着服务的入口流量引入,在生产环境中,我们的业务对系统的可靠性有着更高的要求,然而,基于 Apache APISIX Ingress Controller 其能够支持动态配置,即时生效,降低生产事故的意外及风险,有助于提高运维可维护性。

  • 2、较强的灰度能力
    在实际的业务场景中,有的时候,往往会依据某些特定的需求进行权重调整,结合业务需求按比例进行流量控制,Apache APISIX Ingress Controller 可以支持 Service和 Pod 级别的权重调整,配置清晰而且可读性更强。
    除此,相对于NGINX Ingress Controller 中通过 Annotation 的方式提供 Canary 灰度方案,Apache APISIX Ingress Controller 能够解决其缺陷,从而能够更好的提供灰度策略。

  • 3、较好的扩展能力
    基于 Apache APISIX 强大的插件能力,Apache APISIX Ingress Controller 通过动态绑定插件来增强功能。Apache APISIX 通过插件封装逻辑,易于管理;完善的文档,易于使用和理解。Apache APISIX Ingress Controller 通过配置即可绑定和解绑插件,无需操作脚本。

APISIX Ingress 目前已经支持的自定义资源主要是以下 5 类,涉及到路由、上游、消费者、证书相关和集群公共配置的相关类别。

内置服务发现

APISIX 内置了下面这些服务发现机制:

  • 基于 Eureka 的服务发现

  • 基于 Nacos 的服务发现

  • 基于 Consul 的服务发现

  • 基于 Consul KV 的服务发现

  • 基于 DNS 的服务发现

  • 基于 APISIX-Seed 架构的控制面服务发现

  • 基于 Kubernetes 的服务发现

上面介绍的这些都是基于数据面apisix配置信息手动变更操作的方案集成。其实,在基于k8s的云原生场景下,apisix还提供了一个控制面组件来对apisix的服务发现进行自动管理,那就是apisix ingress

下面就从源码的角度来看看apisix ingress是怎么做到自动的服务发现的

apisix ingress启动

main.go启动入口一路跟踪,进入providers/controller.gorun方法:

func (c *Controller) run(ctx context.Context) {
   log.Infow("controller tries to leading ...",
      zap.String("namespace", c.namespace),
      zap.String("pod", c.name),
   )

   var cancelFunc context.CancelFunc
   ctx, cancelFunc = context.WithCancel(ctx)
   defer cancelFunc()

   // give up leader
   defer c.leaderContextCancelFunc()

   clusterOpts := &apisix.ClusterOptions{
      AdminAPIVersion: c.cfg.APISIX.AdminAPIVersion,
      Name: c.cfg.APISIX.DefaultClusterName,
      AdminKey
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值