问题标签 [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.

0 投票
1 回答
98 浏览

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 插件文档来尝试弄清楚该怎么做。升级不是现在的选择。

提前致谢。

0 投票
2 回答
1671 浏览

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

如何调试绕过原因?

0 投票
1 回答
1519 浏览

nginx - Kong API Gateway - 在自定义插件中读取请求正文

我正在尝试按照此 url在自定义插件中读取请求正文

我收到以下错误

谁能帮我理解这里的问题?我需要在我的插件中记录请求正文。

0 投票
1 回答
155 浏览

lua - 5.1 版本中的 LUA HMAC 生成问题

我在 LUA 5.1 版本中创建 HMAC 时遇到问题,并且相同的代码在 node.js 中工作

Node.js 代码:

我想用相同的代码 LUa 5.1 编写。

0 投票
2 回答
2636 浏览

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 网关中想要的实际行为,如果是,为什么?

0 投票
1 回答
972 浏览

kong - 尝试在 Kong 中创建前置函数时出错

当我尝试在 Kong 中创建前置功能(无服务器)时出现以下错误:

"cannot create 'plugins' entities when not using a database"

我目前正在使用 1.1.1 版 Alpine 容器,并且已将其配置为无 DB 操作。DB-less 设置的文档表明,只要该函数不尝试连接到数据库,我应该没问题,但系统本身与文档相矛盾。现在,该脚本只是一个导入语句。

有什么我可能缺少的东西,还是我必须回去使用数据库进行配置?

0 投票
0 回答
258 浏览

api - 如何向 Kong 插件添加自定义身份验证逻辑

如何将自定义身份验证服务集成到 Kong API 网关,它根据标头或参数验证将调用重定向到不同的端点,并且一旦通过身份验证,应该在 API 网关中生成一个令牌。在Kong插件中这可能吗?你能分享任何与 Kong 相关的示例 GitHub 链接吗?

0 投票
1 回答
88 浏览

gateway - Kong Cloud 是否支持自定义插件?

Kong 最近发布了他们服务的云版本,但我找不到任何好的文档。

我的问题:

  1. 该服务是纯 SAAS,还是我仍需要管理自己的云基础架构?

  2. 我可以安装自定义插件吗?

我问的原因是因为我也在评估Tyk cloud,我想知道它们之间的区别。谢谢

0 投票
0 回答
317 浏览

kubernetes - 管理多个 kong 实例 - 在其各自的数据库上创建 kong 资源

KONG在具有各自数据库的 k8s 集群中有两个实例

  • Kong沙箱实例被命名kong-ingress-controller,其配置如下:

在此处输入图像描述

  • 而且我还有一个名为的Kong生产实例kong-ingress-controller-production,它的配置如下:

在此处输入图像描述

甚至,在这个配置模式下,我可以在同一个端口部署两个kong(沙箱和生产实例),我的意思是8001,因为每个 kong 位于不同的 pod 机器中。

在 kong 沙箱实例中,我创建了以下 kong 资源:

  • basic-authacl KongPlugins

  • 2KongConsumer资源及其各自KongCredentials

  • 而且我已经- --ingress-class=kong在kong沙箱中配置了参数,并且我有一个Ingress指向它的资源

在 kong 沙箱环境中,前面提到的所有资源都创建并存储在其 kong 数据库中。

在kong生产环境中不是这种方式。让我们来看看 ...

我还在kong生产环境中创建以下内容:

  • basic-authacl KongPlugins

  • 1KongConsumer资源及其各自KongCredential

  • 而且我已经- --ingress-class=kong-production在kong生产中配置了参数,并且我有一个Ingress指向它的资源

怎么了?

我的两个 kong 沙箱和生产实例正在运行和工作,但 kong 沙箱环境数据库正在接管 and 的创建和 KongConsumers存储KongCredentials

这些资源没有存储到 kong 生产数据库中,凭据、消费者、基本身份验证和 ACL 插件存储在沙盒数据库中......

只有KongPlugins那些被存储在kong生产数据库中。

这种情况看起来像是不同的 kong 连接在某个时候交叉,或者至少 kong 沙盒环境正在侦听并将请求发送到 kong 生产环境。

我所说的一个测试或证明是,即使是 Kong 生产控制器环境也忽略KongconsumerKongCredential. 这些是与此确认相关的日志

这很奇怪,因为我在每个 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 实例的可用性以及它们中的任何一个都没有击败另一个,例如我们在这张图片中看到的:

在此处输入图像描述

0 投票
1 回答
969 浏览

kong - 无法在 Kong 中启用会话插件(即使升级到最新版本)

首先,我在 ubuntu 16.04 中安装了 Kong 0.14.1(没有 docker)工作正常。

我尝试添加“会话”插件(按照插件页面的示例)

但它只是返回了 400 错误:

我意识到当前版本中不包含会话插件,因此我尝试使用以下命令升级到最新版本(1.1.2):

接下来是系统重新启动以确保。

现在,当我运行以下命令时,我可以看到我使用的是最新版本 1.1.2

但是在尝试启用包时我仍然遇到同样的错误。

使用 'sudo dpkg -P kong-community-edition' 卸载 kong 时,我确实收到了以下错误,但我不确定如何处理此警告,或者它是否与我的问题有关。

我应该更正什么以允许我启用会话插件?

[更新]

如果我将此行添加到配置文件中:

然后,我在启动时收到此错误: