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 没有影响的主要内容,如果未能解决你的问题,请参考以下文章

Kong Ingress Controller TLS

11. Ingress及Ingress Controller(主nginx ingress controller)

k8s ingress及ingress controller

ingress及Ingress Controller

服务未准备好:gitlab-managed-apps/ingress-nginx-ingress-controller

kubernetes k8s nginx ingress 多层代理后的诡异问题