1

在无服务时代,API 网关依旧是管理和充分利用无服务器平台的关键。因此,Apache APISIX 社区也紧跟趋势,在过去的一年多时间内集成了无服务器提供商,如 AWS LambdaAzure 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,因此你需要预先安装 DockerDocker 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 中发起讨论,或通过邮件列表进行交流。

关于 API7.ai 与 APISIX

API7.ai(支流科技)是一家提供 API 处理和分析的开源基础软件公司,于 2019 年开源了新一代云原生 API 网关 -- APISIX 并捐赠给 Apache 软件基金会。此后,API7.ai 一直积极投入支持 Apache APISIX 的开发、维护和社区运营。与千万贡献者、使用者、支持者一起做出世界级的开源项目,是 API7.ai 努力的目标。


API7_技术团队
99 声望45 粉丝

API7.ai 是一家提供 API 处理和分析的开源基础软件公司,于 2019 年开源了新一代云原生 API 网关 -- APISIX 并捐赠给 Apache 软件基金会。此后,API7.ai 一直积极投入支持 Apache APISIX 的开发、维护和社区运营...