乐趣区

关于apisix:API-网关-Apache-APISIX-集成-CNCF-OpenFunction

在无服务时代,API 网关仍旧是治理和充分利用无服务器平台的要害。因而,Apache APISIX 社区也紧跟趋势,在过来的一年多工夫内集成了无服务器提供商,如 AWS Lambda 和 Azure Functions,以及开源的无服务平台 Apache OpenWhisk 等。

本月,APISIX 又新增了不少生态插件,其中就包含与 OpenFunction 集成的无服务插件 openfunction。本文将介绍 Apache APISIX 新的无服务插件 openfunction,并带来更多集成细节。

Apache APISIX

Apache APISIX 是一个动静、实时、高性能的 API 网关,提供负载平衡、动静上游、灰度公布、服务熔断、身份认证、可观测性等丰盛的流量治理性能。Apache APISIX 不仅反对插件动静变更和热插拔,而且领有泛滥实用的插件。

OpenFunction

OpenFunction 是一个云原生的开源 FaaS 平台,旨在让用户专一于本人的业务逻辑,而不用保护底层运行时环境和基础设施。

外围性能包含:

  • 与云提供商的 BaaS 解耦
  • 可插入的架构,容许多个函数运行时
  • 同时反对同步和异步函数
  • 独特的异步函数反对,能够间接应用来自事件源的事件
  • 反对间接从函数源代码生成兼容 OCI 的容器镜像。
  • 灵便的从 0 到 n 的主动缩放
  • 反对基于事件源的特定指标的高级异步性能主动缩放
  • 通过引入 Dapr 简化同步和异步性能的 BaaS 集成
  • K8s Gateway API 提供的高级函数入口和流量治理(进行中)
  • 灵便易用的事件治理框架

集成原理

该插件会将正在进行的申请转发到用户定义的特定 URI,并提供相干的受权细节、申请头、申请注释和查问字符串,而后将响应返回给原始的客户端。

无服务具备高度可扩大和成本低等劣势,应用这种形式部署业务服务可能极大升高资源应用和投入老本。如果你正在应用 OpenFunction 作为无服务平台,你就能够应用 Apache APISIX 去代理这些函数的申请,为函数申请追加服务治理的能力。

正如前文提到的 OpenFunction 外围性能,K8s Gateway API 提供了函数的入口。OpenFunction 的认证形式取决于 K8s 网关,且随网关的抉择而变动。因而这个插件只反对规范的 Basic Auth 认证形式。

如何应用插件

步骤一:装置与运行 APISIX

在这里,咱们举荐应用 Docker 疾速装置 APISIX,因而你须要事后装置 Docker 和 Docker Compose。

装置详情以及更多装置形式请参考 APISIX 装置指南。

首先下载 apisix-docker 仓库。


git clone https://github.com/apache/apisix-docker.git

cd apisix-docker/example

而后应用 docker-compose 启用 APISIX。

对于 x86 零碎:


docker-compose -p docker-apisix up -d

对于 ARM/M1 零碎:


docker-compose -p docker-apisix -f docker-compose-arm64.yml up -d

后续的应用请参考 疾速入门指南。

步骤二:通过 Helm Chart 装置 OpenFunction

请确保以后环境中曾经装置对应版本的 Kubernetes 集群。详情可参考 OpenFunction 装置指南。


# 增加 OpenFunction 到 Chart 存储库

helm repo add openfunction https://openfunction.github.io/charts/

helm repo update

# 装置 OpenFunction chart

kubectl create namespace openfunction

helm install openfunction openfunction/openfunction -n openfunction

你能够通过以下命令来验证 OpenFunction 是否曾经装置胜利:


kubectl get pods --namespace openfunction

步骤三:创立并推送函数

你能够参考 OpenFunction 官网示例 创立函数。构建函数时,你须要应用以下命令为容器仓库生成一个密钥,才能够将函数容器镜像推送到容器仓库 (例如 Docker Hub 或 Quay.io)。


REGISTRY_SERVER=https://index.docker.io/v1/ REGISTRY_USER=<your_registry_user> REGISTRY_PASSWORD=<your_registry_password>

kubectl create secret docker-registry push-secret \

    --docker-server=$REGISTRY_SERVER \

    --docker-username=$REGISTRY_USER \

    --docker-password=$REGISTRY_PASSWORD

步骤四:启用插件

你能够通过以下命令在指定路由中启用该插件:


curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{"uri":"/hello","plugins": {"openfunction": {"function_uri":"http://localhost:30583/default/function-sample/test","authorization": {"service_token":"test:test"}

        }

    }

}'

其中 9180 是 APISIX admin API 裸露的端口,而 localhost:30583 是假如本次通过 NodePort 形式映射的网关入口。

更多对于 OpenFunction 函数入口以及如何设置请参考 Function Entrypoints | OpenFunction。

步骤五:发送申请

插件配置实现后,你能够向路由发送一个申请,它会调用配置好的函数。官网的示例函数 hello-world 会输入“Hello, {函数 uri 中的后缀局部}!\n”。


# 9080 是 APISIX 除 admin API 以外裸露的端口

curl -i http://127.0.0.1:9080/hello

函数返回的响应如下:


hello, test!

敞开插件

当你不须要再应用该插件时,能够通过从路由配置中去除 openfunction 插件来禁用它的性能(留神,依照 Apache APISIX 路由 Schema 要求,在去除该插件后,如果该路由没有其余插件,你必须为该路由配置一个上游对象)。


curl http://127.0.0.1:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{"uri":"/hello","upstream": {"type":"roundrobin","nodes": {"127.0.0.1:1980": 1}
    }
}'

总结

本文为大家介绍了 Apache APISIX openfunction 插件的性能与应用步骤,更多对于 openfunction 插件阐明和残缺配置列表,能够参考官网文档。

目前,APISIX 社区也在开发其余 Serverless 插件以便与更多云服务进行集成。如果你对此类集成我的项目感兴趣,也欢送随时在 GitHub Discussions 中发动探讨,或通过邮件列表进行交换。

退出移动版