用于使用 STDIO/HTTP 的函数的反向代理/中间件
of-watchdog 实现了一个监听端口 8080 的 HTTP 服务器,并作为运行中函数和微服务的反向代理。它可以独立使用,也可以作为 OpenFaaS 容器的入口点。
of-watchdog 此版本的 OpenFaaS 看门狗增加了对 HTTP 代理和 STDIO 的支持,这实现了内存重用和极快的请求服务。它不旨在替代 Classic Watchdog,而是为需要这些功能的用户提供另一种选择。
可通过 GitHub releases 下载,但该看门狗旨在通过多阶段构建从发布到 ghcr.io 的容器镜像中复制:
FROM --platform=${TARGETPLATFORM:-linux/amd64} ghcr.io/openfaas/of-watchdog:0.9.11 as watchdog
FROM --platform=${TARGETPLATFORM:-linux/amd64} node:18-alpine as ship
COPY --from=watchdog /fwatchdog /usr/bin/fwatchdog
参见示例模板
of-watchdog 提供多种模式,这些模式会改变它与微服务或函数代码的交互方式。
三种看门狗模式的比较。左上角 - Classic Watchdog,右上角:afterburn(已弃用),左下角 - of-watchdog 的 HTTP 模式。
三种看门狗模式的比较。左上角 - Classic Watchdog,右上角:afterburn(已弃用),左下角 - of-watchdog 的 HTTP 模式。
由看门狗提供的私有端点:
/_/health/_/ready``/_/health``max_inflight其他所有 HTTP 请求:
/*对于目标语言有可用 HTTP 服务器实现的所有模板,推荐使用 HTTP 模式。
参见一些不同的模板示例,更多模板可通过 faas-cli template store list 获取,例如 golang-middleware、python3-http 和 node*。
faas-cli template store list``golang-middleware``python3-http``node*
要获取特定模板的仓库,请使用 faas-cli template store describe NAME。
faas-cli template store describe NAME
看门狗启动时会 fork 一个进程,然后将传入看门狗的所有请求转发到容器内的 HTTP 端口。
优点:
/tmp/测试示例用法:
$ go build && mode=http port=8081 fprocess="docker run -p 80:80 --name nginx -t nginx" upstream_url=http://127.0.0.1:80 ./of-watchdog
$ go build && mode=http port=8081 fprocess="node expressjs-hello-world.js" upstream_url=http://127.0.0.1:3000 ./of-watchdog
缺点:
目前无法将看门狗自身的消息以 JSON 格式输出:
2024/04/25 17:29:06 Listening on port: 8080
2024/04/25 17:29:06 Writing lock-file to: /tmp/.lock
2024/04/25 17:29:06 Metrics listening on port: 8081
2024/04/25 17:29:08 GET / - 301 Moved Permanently - ContentLength: 39B (0.0049s) [test]
不过,您可以用 JSON 编写自己的日志行。只需将 prefix_logs 环境变量设置为 false,即可移除看门狗原本会添加的默认前缀。
prefix_logs``false
启用 prefix_logs 时:
prefix_logs
2024-04-24T21:00:04Z {"msg": "unable to connect to database"}
禁用 prefix_logs 时:
prefix_logs
{"msg": "unable to connect to database"}
网关会发送 X-Call-Id 头,您应在自己的日志记录器中使用该头来关联和追踪请求。
X-Call-Id
在 HTTP 模式下,如果将 log_callid 环境变量设置为 true,看门狗会将 X-Call-Id 附加到其自己的 HTTP 日志消息的方括号中:
log_callid
2024/04/25 17:29:58 GET / - 301 Moved Permanently - ContentLength: 39B (0.0037s) [079d9ff9-d7b7-4e37-b195-5ad520e6f797]
如果函数通过 exec_timeout 设置了较大的超时时间(如 1h),但您需要单个请求提前超时(例如 1m),则可以通过 HTTP 头 X-Timeout 传递 Go 持续时间来覆盖此行为。
exec_timeout``1h``1m``X-Timeout
X-Timeout 的值必须等于或短于 exec_timeout 环境变量。
X-Timeout``exec_timeout
当 exec_timeout 设置为 0 或未指定时,无法设置 X-Timeout。
X-Timeout``exec_timeout
由于输入/输出直接连接到响应以实现流式传输效率,函数开始执行后无法发送HTTP headers。除非进程分叉出现问题,否则响应码始终为200。中途错误必须由客户端捕获。多线程。
每个请求派生一个进程,能够处理大于内存容量的请求体——例如,512MB内存的虚拟机可以处理多个GB的视频。
由于输入/输出直接连接到响应以实现流式传输效率,函数开始执行后无法发送HTTP头。响应代码始终为200,除非派生进程时出现问题。中途错误必须由客户端检测。多线程。
此模式启动一个HTTP文件服务器,用于提供static_path指定目录中的静态内容。
请参见Hugo博客文章中的示例。
| 选项 | 用法 |
|---|---|
write_debug | 在经典watchdog中,此选项将响应体打印到控制台 |
read_debug | 在经典watchdog中,此选项将请求体打印到控制台 |
combined_output | 在经典watchdog中,此选项会在函数的HTTP响应中返回STDOUT和STDERR;关闭时仅返回STDOUT,并将STDERR打印到watchdog的日志中 |
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务