如何在 K8s 环境中自动管理网关服务器(使用 OpenResty Edge)
OpenResty® Deb 软件包
lijunlong , 2023 年 12 月 12 日(创建于 2017 年 6 月 6 日)OpenResty 官方 APT 存储库 提供以下 deb 软件包(适用于 Ubuntu 和 Debian)。
openresty
这是核心 OpenResty 服务器的生产版本。
此软件包注册 /usr/bin/openresty
,它是指向 OpenResty 的 nginx
可执行文件的符号链接,/usr/local/openresty/nginx/sbin/nginx
。默认情况下,此 openresty
命令对您的 PATH
环境可见。当您要调用此软件包提供的 nginx 可执行文件时,始终键入 openresty
而不是 nginx
。默认情况下,nginx
可执行文件对您的 PATH
环境不可见,但是,为了避免与同一系统中的其他 NGINX 软件包和安装发生任何混淆。
您还可以通过以下命令启动默认的 OpenResty 服务器
sudo systemctl start openresty
支持的其他 systemctl 操作是 stop
、restart
和 reload
。
默认服务器前缀为 /usr/local/openresty/
。对于您自己的 OpenResty 应用程序,强烈建议您指定自己的服务器前缀并将其指向您自己的应用程序目录,例如
sudo openresty -p /opt/my-fancy-app/
然后您在 /opt/my-fancy-app/
目录下有子目录,如 conf/
、html/
和 logs/
。这样,我们可以避免污染 /usr/local/openresty/
下的 OpenResty 安装树,并允许多个不同的 OpenResty 应用程序共享相同的 OpenResty 服务器安装。但是,您将需要自己为每个 OpenResty 应用程序草拟一个 init 脚本。您可以使用默认的 /etc/init.d/openresty
init 脚本作为模板。
我们使用我们自己的 OpenSSL 版本(通过 openresty-openssl
软件包)、PCRE、zlib 和 LuaJIT 来确保这些关键组件是最新的且格式良好。
openresty-resty
此软件包包含 resty
命令行实用程序,该实用程序对您的 PATH
环境可见(作为 /usr/bin/resty
。要试用它,只需键入
$ resty -e 'ngx.say("hello")'
hello
此软件包依赖于标准 perl
软件包和我们的 openresty
软件包才能正常工作。
有关更多详细信息,请参阅 resty-cli 项目。
openresty-restydoc
此软件包包含 OpenResty 文档工具链和文档数据。最实用的工具是 restydoc
命令行实用程序,默认情况下它对您的 PATH
环境可见(作为 /usr/bin/restydoc
。
要试用它
restydoc ngx_lua
restydoc -s content_by_lua
restydoc -s proxy_pass
有关其用法的更多详细信息,请参阅 restydoc -h
命令的输出。
为了获得最佳结果,请确保您的终端使用 UTF-8 字符编码,并且您的 perl
和 groff
安装都足够现代。否则,这些非 ASCII 字符可能无法正确显示。
openresty-opm
此软件包包含用于 OpenResty 包管理器的命令行实用程序 opm。此工具可用于从中央 OPM 包服务器安装社区贡献的 OpenResty 包
openresty-debug
这是 OpenResty 的正常调试版本。与 openresty
软件包相比,它具有以下区别
- 它在构建中禁用了 C 编译器优化。
- 它启用了 NGINX 调试日志功能。
- 除了默认的 epoll 模块之外,它还在 NGINX 中启用了 poll 模块,以便可以使用 mockeagain 测试工具。
- 它使用
openresty-openssl-debug
软件包而不是openresty-openssl
来作为 OpenSSL 库。 - 它在 LuaJIT 构建中启用了 API 检查和断言。
- 它在
ngx_http_lua
模块中启用了断言。 - 它使
ngx_http_lua
模块在 LuaJIT 在其 GC 管理的内存(默认行为是记录错误消息并优雅地退出当前工作进程)中出现分配失败时立即中止当前 nginx 工作进程。 - 其 NGINX 的默认服务器前缀为
/usr/local/openresty-debug/
。 - 对您的
PATH
环境可见的入口点是openresty-debug
而不是openresty
。 - 它没有附带 init 脚本。
您永远不应在生产中使用此软件包。此软件包仅用于开发。
openresty-valgrind
这是一个针对 Valgrind 工具链的 OpenResty 特殊调试版本。Valgrind 是一个功能强大的工具,用于检查各种内存问题,例如内存泄漏和内存无效访问。为了最大限度地提高通过 Valgrind 捕获内存错误的可能性,除了 openresty-debug
软件包中完成的那些之外,此构建还执行以下操作
- 它通过应用 "no-pool" 修补程序来禁用 NGINX 中使用的内存池。
- 它强制 LuaJIT 使用系统分配器而不是它自己的分配器。
- 它通过
-DLUAJIT_USE_VALGRIND
C 编译器标志在 LuaJIT 构建中启用内部 Valgrind 协作。 - 其 NGINX 的默认服务器前缀为
/usr/local/openresty-valgrind/
。 - 对您的
PATH
环境可见的入口点是openresty-valgrind
而不是openresty-debug
。
有关 OpenResty 上下文中基于 Valgrind 的测试的更多详细信息,请参阅以下教程
https://openresty.gitbooks.io/programming-openresty/content/testing/test-modes.html#_valgrind_mode
要在 x86_64
系统上使用此 OpenResty 特殊构建,您必须使用 Valgrind 运行,否则 LuaJIT VM 甚至无法正确执行分配。
此外,为了获得最佳结果,在您的 nginx.conf
文件开头配置以下内容很重要
daemon off;
master_process off;
worker_processes 1;
openresty-asan
这是 OpenResty 的 gcc AddressSanitizer 构建。与 openresty-debug
软件包相比,它有以下更改
- 它使用命令
gcc -fsanitize=address
进行编译和链接。 - 它在构建中使用 C 编译器选项
-O1 -fno-omit-frame-pointer
。 - 它通过应用 "no-pool" 修补程序来禁用 NGINX 中使用的内存池。
- 它通过
-DLUAJIT_USE_VALGRIND
C 编译器标志在 LuaJIT 构建中启用内部 Valgrind 协作。 - 其 NGINX 的默认服务器前缀为
/usr/local/openresty-asan/
。 - 对您的
PATH
环境可见的入口点是openresty-asan
而不是openresty-debug
。 - 它使用
openresty-zlib-asan
、openresty-pcre-asan
和openresty-openssl-asan
软件包作为运行时依赖项。
在启动此 OpenResty 特殊构建之前,指定以下系统环境以避免已知的内存泄漏误报很重要
export ASAN_OPTIONS=detect_leaks=0
您可能还需要指定一些抑制规则以消除其他误报。有关更多详细信息,请参阅以下 ASAN 文档
https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer
openresty-openssl
这是我们自己构建的 OpenSSL 库。特别是,我们在构建中禁用了线程支持,以节省一些开销。
我们包含了自己的(很小的)补丁来支持 OpenResty 中的先进 SSL 功能,例如 ssl_session_fetch_by_lua。
此外,我们还提供了自己的 OpenSSL 包,以确保即使在较旧的系统上,OpenResty 中也使用最新的主流 OpenSSL 版本。
openresty-openssl-debug
这是 OpenSSL 库的调试版本。与 openresty-openssl
相比,它有以下更改
- 它禁用了任何 C 编译器优化。
- 它是 Valgrind 清洁的,没有 Valgrind 假阳性。
- 汇编代码被禁用,因此我们始终拥有完美的 C 级回溯等等。
- 它安装到前缀
/usr/local/openresty-debug/openssl/
中。
openresty-openssl111
这是我们自己构建的 OpenSSL v1.1.1 库。
我们包含了自己的(很小的)补丁来支持 OpenResty 中的先进 SSL 功能,例如 ssl_session_fetch_by_lua。
此外,我们还提供了自己的 OpenSSL 包,以确保即使在较旧的系统上,OpenResty 中也使用最新的主流 OpenSSL 版本。
openresty-openssl111-debug
这是 OpenSSL v1.1.1 库的调试版本。与 openresty-openssl111
相比,它有以下更改
- 它禁用了任何 C 编译器优化。
- 它是 Valgrind 清洁的,没有 Valgrind 假阳性。
- 汇编代码被禁用,因此我们始终拥有完美的 C 级回溯等等。
- 它安装到前缀
/usr/local/openresty-debug/openssl111/
中。
openresty-openssl111-asan
这是 OpenSSL v1.1.1 库的 gcc AddressSanitizer 版本。与 openresty-openssl111-debug
包相比,它有以下更改
- 它使用命令
gcc -fsanitize=address
进行编译和链接。 - 它使用
openresty-zlib-asan
包而不是openresty-zlib
作为运行时依赖项。 - 它在构建中使用 C 编译器选项
-O1 -fno-omit-frame-pointer
。 - 它安装到前缀
/usr/local/openresty-asan/openssl111/
中。
openresty-zlib
这是我们自己构建的 zlib 库,用于 gzip 压缩。我们提供自己的 zlib 包,以确保即使在较旧的系统上,OpenResty 中也使用最新的主流 zlib 版本。
openresty-pcre
这是我们自己构建的 PCRE 库,用于 gzip 压缩。我们提供自己的 PCRE 包,以确保即使在较旧的系统上,OpenResty 中也使用最新的主流 PCRE 版本。
openresty-pcre2
这是我们自己构建的 PCRE2 库。我们提供自己的 PCRE2 包,以确保即使在较旧的系统上,OpenResty(>= 1.25)中也使用最新的主流 PCRE2 版本。
liblemplate-perl
此软件包提供了命令行实用程序 lemplate,它可以将 perl 的 TT2 模板语言语法中的模板文件编译为 OpenResty 的独立 Lua 模块。
例如,OpenResty 官方网站 openresty.org 使用 Lemplate 作为 HTML 页面模板编译器。
libtest-nginx-perl
这是我们的 Test::Nginx 测试框架。阅读以下书籍章节,全面了解此测试框架
https://openresty.gitbooks.io/programming-openresty/content/testing/
开发包
我们为我们的二进制库包 openresty-zlib
、openresty-pcre
、openresty-openssl
和 openresty-openssl-debug
提供开发包。这些包包含对应二进制包的头文件和静态库归档文件。与它们的二进制对应物相比,它们的名字都带有一个 -dev
后缀。例如,对于 openresty-zlib
我们有 openresty-zlib-dev
,对于 openresty-pcre
我们有 openresty-pcre-dev
,对于 openresty-openssl
我们有 openresty-opnessl-dev
,对于 openresty-openssl-debug
我们也有 openresty-openssl-debug-dev
。
调试符号包
我们为那些包含二进制组件的包(如 openresty
和 openresty-openssl
包)提供调试符号包。它们的调试符号包只是在包名中添加了 -dbgsym
后缀,就像其他标准 deb 包一样。
例如,要安装 openresty
包的调试符号包,只需安装 openresty-dbgsym
包。同样,openresty-debug
包的调试符号包是 openresty-debug-dbgsym
。
源代码
用于构建这些包的源文件可以在 openresty-packaging
GitHub 仓库中找到
https://github.com/openresty/openresty-packaging/tree/master/deb/
另请参阅
有关我们官方 OpenResty 包仓库的更多详细信息,请参阅 Linux Packages 页面。