API 网关 Apache APISIX 集成 CNCF OpenFunction

在无服务时代,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.ai 是一家提供 API 处理和分析的开源基础软件公司,于 2019 年开源了新一代云原生 API 网关 -- API...

99 声望
37 粉丝
0 条评论
推荐阅读
API7 助力头部券商实现数字化转型
随着中国经济步入高质量发展阶段,数字化转型正在被更多的企业提上议程。2021 年证监会出台的《证券期货行业科技发展“十四五”规划》中指出,需“提升证券期货业数据治理水平”,“深化数字化转型标准建设,推动行业...

API7_技术团队阅读 228

译文 | A poor man's API
在 API 日渐流行的年代,越来越多的非技术人员也希望能从 API 的使用中获利,而创建一套成熟的 API 方案需要时间成本和金钱两方面的资源加持。在这个过程中,你需要考虑模型、设计、REST 原则等,而不仅仅是编写...

API7_技术团队2阅读 1.3k

有了 NGINX 和 Kong,为什么还需要 Apache APISIX?
2021 年 5 月,云原生社区技术沙龙·广州站,API7.ai(支流科技)联合创始人 & CTO,Apache APISIX PMC 王院生在活动上做了《有了 NGINX 和 Kong,为什么还需要 Apache APISIX》的分享,以下是现场分享的文字版。...

API7_技术团队1阅读 4.5k

最新出炉!开源 API 网关的性能对比:APISIX 3.0 和 Kong 3.0
云原生时代下,企业逐渐向云上迁移,越来越多的应用和服务都在进行容器化改造,服务之间的流量也开始爆发性的增长。为了能高效地管理这些规模庞大的 API,API 网关开始在技术领域大展身手。

API7_技术团队1阅读 1.2k

Apache APISIX 结合 Authing 实现集中式身份认证管理
Apache APISIX 是一个动态、实时、高性能的 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。Apache APISIX 不仅支持插件动态变更和热插拔,而且拥有众多实用的...

API7_技术团队1阅读 2.5k

Kubernetes Gateway API 深入解读和落地指南
Kubernetes Gateway API 是 Kubernetes 1.18 版本引入的一种新的 API 规范,是 Kubernetes 官方正在开发的新的 API,Ingress 是 Kubernetes 已有的 API。Gateway API 会成为 Ingress 的下一代替代方案。Gateway A...

Rainbond2阅读 456

Apache APISIX 助力便利充电创领者小电,实现云原生方案
原文链接业务背景小电作为国内共享充电宝服务平台,目前还处于初创阶段。从运维体系、测试环境等方面来讲,当下产品的业务主要面临了以下几个问题:VM 传统模式部署,利用率低且不易扩展开发测试资源抢占多套独立...

API7_技术团队1阅读 1.7k

API7.ai 是一家提供 API 处理和分析的开源基础软件公司,于 2019 年开源了新一代云原生 API 网关 -- API...

99 声望
37 粉丝
宣传栏