问题标签 [kong-plugin]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kong - 在kong插件中获取匹配的URI
我正在编写一个 Kong 插件(v. 0.13)并且想知道在哪里/如何从 API 中找到匹配的 URI。例如,uris
设置以下值:
API 将匹配/endpoint
. 那么在插件中,我如何访问匹配的 URI?我试过kong.request.get_path()
or ngx.req.get_path()
,但是这两个都返回 nil 值/抛出错误。理想情况下,如果uris
参数包含/[0-9a-z?=]
我想在单个字段中匹配整个 URI,包括任何查询参数(即 URI 的主机和端口组件之后的所有内容)。
我正在使用 0.14 插件文档来尝试弄清楚该怎么做。升级不是现在的选择。
提前致谢。
caching - X-Cache-Status 始终使用 Kong 代理缓存插件绕过
我在 Kong 有服务,我为该服务设置了代理缓存插件。
curl -X POST http://localhost:8001/plugins --data "name=proxy-cache" --data "config.strategy=redis" --data 'service_id=2f0a285d-7b25-48d6-adc3-bbf28ffe5f47' --data "config.redis.host=127.0.0.1" --data "config.redis.port=6379" --data "config.redis.password=my_redis_password"
当我从该服务调用 API 时:
curl -i -X GET --url http://localhost:3002/v1/currency --header 'apikey: MY_API_KEY'
一切正常,但X-Cache-Status始终是Bypass
如何调试绕过原因?
lua - 5.1 版本中的 LUA HMAC 生成问题
我在 LUA 5.1 版本中创建 HMAC 时遇到问题,并且相同的代码在 node.js 中工作
Node.js 代码:
我想用相同的代码 LUa 5.1 编写。
api-key - Kong API 密钥策略
我想使用 Kong 作为我所有上游服务的 API 网关。我想使用 API 密钥,以便我的客户可以使用它来使用他们允许使用的一些 API。
有一个用于管理 API 密钥的插件:https ://docs.konghq.com/hub/kong-inc/key-auth/
但我想知道是否可以将属性添加到某些 API 密钥或将其链接到某些配置。
让我用一个例子来解释:
我有 3 个 API
- API 1
- API 2
- API 3
在 Kong API Gateway 上,我想使用速率限制。所以我想为 2 个具有某些属性的客户生成 API 密钥
- 客户 X:基本订阅,API 1 的速率限制为每分钟 10 个请求,API 2 的速率限制为每分钟 20 个请求
- 客户 Y:API 2 的高级订阅,其速率限制为每分钟 5000 个请求,API 3 的速率限制为每分钟 1000 个请求
因此,在 Kong 中,我为这 3 个 API 创建了 3 个服务,并向其中添加了速率限制插件。有没有办法让速率限制插件知道(基于请求中发送的 API 密钥)它应该对刚刚输入的请求使用什么限制?
在我看来,我每次都需要为相同的 API 创建具有特定值的特定速率限制的新服务。在处理大量客户和 api 时,这感觉有点难以管理。
是否可以根据传递的 API 密钥获取速率限制值?
或者有什么解决办法吗?或者这是我们在 API 网关中想要的实际行为,如果是,为什么?
kong - 尝试在 Kong 中创建前置函数时出错
当我尝试在 Kong 中创建前置功能(无服务器)时出现以下错误:
"cannot create 'plugins' entities when not using a database"
我目前正在使用 1.1.1 版 Alpine 容器,并且已将其配置为无 DB 操作。DB-less 设置的文档表明,只要该函数不尝试连接到数据库,我应该没问题,但系统本身与文档相矛盾。现在,该脚本只是一个导入语句。
有什么我可能缺少的东西,还是我必须回去使用数据库进行配置?
api - 如何向 Kong 插件添加自定义身份验证逻辑
如何将自定义身份验证服务集成到 Kong API 网关,它根据标头或参数验证将调用重定向到不同的端点,并且一旦通过身份验证,应该在 API 网关中生成一个令牌。在Kong插件中这可能吗?你能分享任何与 Kong 相关的示例 GitHub 链接吗?
kubernetes - 管理多个 kong 实例 - 在其各自的数据库上创建 kong 资源
我KONG
在具有各自数据库的 k8s 集群中有两个实例
- Kong沙箱实例被命名
kong-ingress-controller
,其配置如下:
- 而且我还有一个名为的Kong生产实例
kong-ingress-controller-production
,它的配置如下:
甚至,在这个配置模式下,我可以在同一个端口部署两个kong(沙箱和生产实例),我的意思是8001
,因为每个 kong 位于不同的 pod 机器中。
在 kong 沙箱实例中,我创建了以下 kong 资源:
basic-auth
和acl
KongPlugins2
KongConsumer
资源及其各自KongCredentials
而且我已经
- --ingress-class=kong
在kong沙箱中配置了参数,并且我有一个Ingress
指向它的资源
在 kong 沙箱环境中,前面提到的所有资源都创建并存储在其 kong 数据库中。
在kong生产环境中不是这种方式。让我们来看看 ...
我还在kong生产环境中创建以下内容:
basic-auth
和acl
KongPlugins1
KongConsumer
资源及其各自KongCredential
而且我已经
- --ingress-class=kong-production
在kong生产中配置了参数,并且我有一个Ingress
指向它的资源
怎么了?
我的两个 kong 沙箱和生产实例正在运行和工作,但 kong 沙箱环境数据库正在接管 and 的创建和 KongConsumers
存储KongCredentials
。
这些资源没有存储到 kong 生产数据库中,凭据、消费者、基本身份验证和 ACL 插件存储在沙盒数据库中......
只有KongPlugins
那些被存储在kong生产数据库中。
这种情况看起来像是不同的 kong 连接在某个时候交叉,或者至少 kong 沙盒环境正在侦听并将请求发送到 kong 生产环境。
我所说的一个测试或证明是,即使是 Kong 生产控制器环境也忽略Kongconsumer
了KongCredential
. 这些是与此确认相关的日志
这很奇怪,因为我在每个 Kong 部署中都指定了 --ingress-class 参数,并且每个参数都有这种方式的特定值:
- kong 生产环境 -->
- --ingress-class=kong-production
- kong 沙盒环境 -->
- --ingress-class=kong
并且在每个资源中使用这种方式的注释Ingress
指向每个特定的 kong 类:kubernetes.io/ingress.class
指向kong沙箱的入口--->
kubernetes.io/ingress.class: "kong"
指向kong生产的入口--->
kubernetes.io/ingress.class: "kong-production"
有人知道这里发生了什么吗?
如何重定向或至少执行此行为的调试?我一直在检查日志和端口转发操作,以确认两个 kong 实例的可用性以及它们中的任何一个都没有击败另一个,例如我们在这张图片中看到的:
kong - 无法在 Kong 中启用会话插件(即使升级到最新版本)
首先,我在 ubuntu 16.04 中安装了 Kong 0.14.1(没有 docker)工作正常。
我尝试添加“会话”插件(按照插件页面的示例)
但它只是返回了 400 错误:
我意识到当前版本中不包含会话插件,因此我尝试使用以下命令升级到最新版本(1.1.2):
接下来是系统重新启动以确保。
现在,当我运行以下命令时,我可以看到我使用的是最新版本 1.1.2
但是在尝试启用包时我仍然遇到同样的错误。
使用 'sudo dpkg -P kong-community-edition' 卸载 kong 时,我确实收到了以下错误,但我不确定如何处理此警告,或者它是否与我的问题有关。
我应该更正什么以允许我启用会话插件?
[更新]
如果我将此行添加到配置文件中:
然后,我在启动时收到此错误: