首页
/ OpenFaaS API 网关接口规范详解

OpenFaaS API 网关接口规范详解

2025-07-05 05:21:06作者:冯梦姬Eddie

概述

OpenFaaS 是一个开源的函数即服务(FaaS)框架,它允许开发者在Kubernetes或Docker Swarm等容器编排系统上轻松部署和管理无服务器函数。本文将从技术角度深入解析OpenFaaS API网关的接口规范,帮助开发者更好地理解和使用OpenFaaS的核心API功能。

API基础信息

OpenFaaS API遵循OpenAPI 3.0.1规范,当前版本为0.8.12。API网关提供了以下几类主要功能:

  1. 系统健康检查和监控
  2. 函数管理(部署、更新、删除、扩展)
  3. 函数调用(同步/异步)
  4. 密钥管理
  5. 日志查询
  6. 命名空间管理

核心API端点分析

1. 健康检查与监控

/healthz

  • 方法:GET
  • 用途:检查API网关是否正常运行
  • 响应:200表示健康,500表示不健康

/metrics

  • 方法:GET
  • 用途:获取Prometheus格式的监控指标
  • 响应:返回文本格式的Prometheus指标数据

2. 系统信息查询

/system/info

  • 方法:GET
  • 用途:获取系统提供商信息,包括版本号和编排系统类型
  • 响应:包含ProviderInfo和VersionInfo的GatewayInfo对象

3. 函数管理

/system/functions

  • GET:获取已部署函数列表(包含统计信息和镜像摘要)
  • POST:部署新函数(需要FunctionDeployment对象)
  • PUT:更新函数配置
  • DELETE:删除函数(需要DeleteFunctionRequest对象)

/system/scale-function/{functionName}

  • POST:扩展函数实例数量
  • 请求体:ScaleServiceRequest对象

/system/function/{functionName}

  • GET:获取指定函数的详细状态信息
  • 可选参数:namespace(命名空间)

4. 函数调用

同步调用

  • /function/{functionName}:默认命名空间
  • /function/{functionName}.{namespace}:指定命名空间

异步调用

  • /async-function/{functionName}:默认命名空间
  • /async-function/{functionName}.{namespace}:指定命名空间

两种调用方式都支持:

  • 通过请求体传递数据给函数
  • 额外的路径段和查询参数会原样传递给函数

5. 密钥管理

/system/secrets

  • GET:列出所有密钥名称和元数据
  • POST:创建新密钥
  • PUT:更新密钥值
  • DELETE:删除密钥

6. 日志查询

/system/logs

  • GET:获取函数日志流
  • 参数:
    • name:函数名称(必需)
    • namespace:命名空间(可选)
    • instance:函数实例(可选)
    • tail:返回日志行数限制
    • follow:是否持续流式传输
    • since:仅返回指定时间后的日志

7. 命名空间管理

/system/namespaces

  • GET:获取所有命名空间列表
  • 响应:ListNamespaceResponse对象

关键数据结构

GatewayInfo

包含网关的基本信息:

  • provider:提供商信息(ProviderInfo)
  • version:版本信息(VersionInfo)
  • arch:平台架构

FunctionDeployment

函数部署配置,包含:

  • service:函数名称
  • image:容器镜像
  • envProcess:进程环境
  • envVars:环境变量
  • constraints:部署约束
  • secrets:密钥列表
  • labels:标签
  • annotations:注解
  • limits:资源限制
  • requests:资源请求

FunctionStatus

函数状态信息,包含:

  • name:函数名称
  • image:容器镜像
  • replicas:副本数
  • invocationCount:调用次数
  • availableReplicas:可用副本数

Secret

密钥对象,包含:

  • name:密钥名称
  • value:密钥值(base64编码)

使用场景示例

1. 部署新函数

POST /system/functions
{
  "service": "hello-world",
  "image": "functions/hello-world:latest",
  "envProcess": "python index.py",
  "envVars": {
    "MY_ENV": "value"
  },
  "secrets": ["db-password"],
  "labels": {
    "com.example.foo": "bar"
  }
}

2. 同步调用函数

POST /function/hello-world
Content-Type: application/json

{"name": "Alice"}

3. 查询函数日志

GET /system/logs?name=hello-world&tail=100&follow=true

最佳实践

  1. 安全调用:所有API端点都支持基本认证,建议在生产环境中启用

  2. 异步处理:对于耗时操作,使用异步调用避免阻塞

  3. 自动扩展:结合AlertManager和/system/alert端点实现基于指标的自动扩展

  4. 命名空间隔离:在多租户环境中使用命名空间进行资源隔离

  5. 密钥管理:敏感配置应通过密钥系统管理,而非环境变量

总结

OpenFaaS API网关提供了完整的功能来管理无服务器函数生命周期。通过理解这些API端点及其数据结构,开发者可以更高效地构建和管理基于OpenFaaS的无服务器应用。无论是简单的函数部署调用,还是复杂的生产级运维管理,这套API都能提供强大的支持。