如何在 K8s 环境中自动管理网关服务器(使用 OpenResty Edge)
OpenResty® RPM 包
lijunlong , 2023 年 12 月 12 日(创建于 2016 年 7 月 14 日)OpenResty 官方 Yum 仓库提供以下 RPM 包。
openresty
这是核心 OpenResty 服务器的生产版本。
此包注册了 /usr/bin/openresty
,它是一个指向 OpenResty 的 nginx
可执行文件 /usr/local/openresty/nginx/sbin/nginx
的符号链接。默认情况下,此 openresty
命令对您的 PATH
环境可见。当您想调用此包提供的 nginx 可执行文件时,始终键入 openresty
而不是 nginx
。默认情况下,nginx
可执行文件对您的 PATH
环境不可见,但是,为了避免与同一系统中的其他 NGINX 包和安装产生任何混淆。
您还可以通过以下命令启动默认的 OpenResty 服务器
sudo service openresty start
或者
sudo systemctl start openresty
其他支持的操作包括 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-doc
此包包含 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
模块中启用了断言。 - 当 LuaJIT 在其 GC 管理的内存中出现分配失败时,它使
ngx_http_lua
模块立即中止当前的 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 中的 advanced SSL 功能,例如 ssl_session_fetch_by_lua。
此外,我们还打包了 OpenSSL,以确保即使在较旧的系统上,OpenResty 也能使用最新主流版本的 OpenSSL。
openresty-openssl-debug
这是 OpenSSL 库的调试版本。与 openresty-openssl
相比,它具有以下变化
- 它禁用了任何 C 编译器的优化。
- 它在 Valgrind 上运行良好,没有任何误报。
- 汇编代码被禁用,因此我们始终拥有完美的 C 级代码回溯等。
- 它安装在
/usr/local/openresty-debug/openssl/
前缀中。
openresty-openssl-asan
这是 OpenSSL 库的 gcc AddressSanitizer 版本。与 openresty-openssl-debug
包相比,它具有以下变化
- 它使用命令
gcc -fsanitize=address
进行编译和链接。 - 它使用
openresty-zlib-asan
包而不是openresty-zlib
作为运行时依赖项。 - 它在构建中使用 C 编译器选项
-O1 -fno-omit-frame-pointer
。 - 它安装在
/usr/local/openresty-asan/openssl/
前缀中。
openresty-openssl111
这是我们自己构建的 OpenSSL v1.1.1 库。
我们包含了自己的(小的)补丁来支持 OpenResty 中的 advanced SSL 功能,例如 ssl_session_fetch_by_lua。
此外,我们还打包了 OpenSSL,以确保即使在较旧的系统上,OpenResty 也能使用最新主流版本的 OpenSSL。
openresty-openssl111-debug
这是 OpenSSL v1.1.1 库的调试版本。与 openresty-openssl111
相比,它具有以下变化
- 它禁用了任何 C 编译器的优化。
- 它在 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
这是我们自己构建的用于 gzip 压缩的 zlib 库。我们打包了 zlib,以确保即使在旧系统上,OpenResty 也能使用最新主流版本的 zlib。
openresty-zlib-asan
这是 Zlib 库的 gcc AddressSanitizer 版本。与 openresty-zlib-debug
包相比,它具有以下变化
- 它使用命令
gcc -fsanitize=address
进行编译和链接。 - 它在构建中使用 C 编译器选项
-O1 -fno-omit-frame-pointer
。 - 它安装在
/usr/local/openresty-asan/zlib/
前缀中。
openresty-pcre
这是我们自己构建的 PCRE 库。我们打包了 PCRE,以确保即使在旧系统上,OpenResty 也能使用最新主流版本的 PCRE。
openresty-pcre-asan
这是 PCRE 库的 gcc AddressSanitizer 版本。与 openresty-pcre-debug
包相比,它具有以下变化
- 它使用命令
gcc -fsanitize=address
进行编译和链接。 - 它在构建中使用 C 编译器选项
-O1 -fno-omit-frame-pointer
。 - 它安装在
/usr/local/openresty-asan/pcre/
前缀中。
openresty-pcre2
这是我们自己构建的 PCRE2 库。我们打包了 PCRE2,以确保即使在旧系统上,OpenResty (>= 1.25) 也能使用最新主流版本的 PCRE2。
perl-Lemplate
此包提供了命令行工具 lemplate,它可以将 perl 的 TT2 模板语言语法中的模板文件编译为 OpenResty 的独立 Lua 模块。
例如,OpenResty 官方网站 openresty.org 使用 Lemplate 作为 HTML 页面模板编译器。
perl-Test-Nginx
这是我们的 Test::Nginx 测试框架。请阅读以下书籍章节,了解有关此测试框架的完整介绍
https://openresty.gitbooks.io/programming-openresty/content/testing/
开发包
我们为二进制库包 openresty-zlib
、openresty-pcre
、openresty-openssl
和 openresty-openssl-debug
提供开发包。这些包包含相应二进制包的头文件和静态库存档文件。与它们的二进制对应物相比,它们的名称都带有一个 -devel
后缀。例如,我们有 openresty-zlib-devel
用于 openresty-zlib
,openresty-pcre-devel
用于 openresty-pcre
,openresty-openssl-devel
用于 openresty-opnessl
,以及 openresty-openssl-debug-devel
用于 openresty-openssl-debug
。
调试信息包
我们为那些包含二进制组件的包(如 openresty
和 openresty-openssl
包)提供调试信息(或调试符号)包。它们的调试信息包在包名中仅带有 -debuginfo
后缀,就像其他标准 RPM 包一样。
例如,要安装 openresty
包的调试信息包,只需安装 openresty-debuginfo
包。类似地,openresty-debug
包的调试信息包是 openresty-debug-debuginfo
。
源代码
用于构建这些包的源文件可以在 openresty-packaging
GitHub 存储库中找到
https://github.com/openresty/openresty-packaging/tree/master/rpm/
另见
有关我们官方 OpenResty 软件包存储库的更多详细信息,请参阅 Linux 软件包 页面。