Kong Ingress Controller 对 Kong Plugins 没有影响
Posted
技术标签:
【中文标题】Kong Ingress Controller 对 Kong Plugins 没有影响【英文标题】:Kong Ingress Controller has no effect on Kong Plugins 【发布时间】:2020-01-16 13:42:44 【问题描述】:我已经通过 kong-ingress-controller deployment 和 getting started doc 完成了提到的所有事情。
-
更新用户权限
部署 Kong 入口控制器
设置环境变量
使用路由创建 Ingress
一切正常,我可以根据路由访问我的应用程序。但是当我添加速率限制插件或任何其他插件时,它没有任何效果。
ingress.yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: kong
plugins.konghq.com: http-ratelimit, http-auth
spec:
rules:
- host: foo.bar
http:
paths:
- path: /users
backend:
serviceName: my-service
servicePort: 80
rate-limit.yaml:
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: http-ratelimit
labels:
global: 'true'
config:
minute: 5
plugin: rate-limiting
但是速率限制插件对我的入口没有影响。
注意:kong-ingress-controller 在 kong 命名空间中,但其他资源在默认命名空间中。我尝试将所有内容移至 kong 命名空间,然后插件可以工作,但服务无法正常工作,因为它在默认命名空间中。
提前致谢。
【问题讨论】:
【参考方案1】:查看Kong docs,速率限制 YAML 看起来是正确的。如果资源配置正确,Kong 不会将请求与入口资源匹配,因为用户没有发送正确的请求。
【讨论】:
不,这是一个简单的 GET 请求。我删除了所有插件、消费者、入口并再次创建它开始工作。现在如果我想删除key-auth插件并添加oath2插件,新插件不起作用。 从 Ingress/Service yamls 中删除注释。为 oauth2 创建一个新的 kong 插件,并使用新创建的插件在 Ingress/Service 中添加/更新注解。【参考方案2】:KongPlugin,KongIngress 应该和 Service 在同一个命名空间中。 YAML 提供了正确的外观。 Ingress yamls注解和配置一定有问题。你的服务是用Ingress对象注解的吗?
【讨论】:
【参考方案3】:我认为您需要将此注释添加到您的 KongPlugin:
annotations:
kubernetes.io/ingress.class: kong
所以试试
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: http-ratelimit
annotations:
kubernetes.io/ingress.class: kong
[...]
【讨论】:
这个注解到底是做什么的?请解释代码,这样其他人可以从你的答案中受益更多,而不是只写代码而不解释 至少,它可以工作。 :) 在研究解决与原始海报相同的问题时,我偶然发现了this bug report,尝试了一下,它奏效了。 我在使用 OAuth2 插件时遇到了同样的问题。当应用于入口资源时,它没有任何影响。我也尝试了上述解决方案(添加注释),但是当 curl api 请求未传递授权标头时,我没有收到 http 401 错误。我的配置请参考这个 yaml (pastebin.com/yLhEbJTt) 和这个 (pastebin.com/qVgf8YG2)。有什么提示吗?以上是关于Kong Ingress Controller 对 Kong Plugins 没有影响的主要内容,如果未能解决你的问题,请参考以下文章
11. Ingress及Ingress Controller(主nginx ingress controller)
k8s ingress及ingress controller