首页 > 解决方案 > Kuberentes 入口速率限制改变重写目标基础

问题描述

我有一个仅包含一个注释的 Ingress 文件:

---
  apiVersion: "extensions/v1beta1"
  kind: "Ingress"
  metadata: 
    name: "logging-microservice-ingress"
    namespace: "000000001"
    annotations:
      nginx.ingress.kubernetes.io/rewrite-target: /
  spec: 
    rules: 
      - 
        host: "ms-shared-nad.techmahindra.com"
        http: 
          paths: 
            - 
              backend: 
                serviceName: "logging-microservice-000000001"
                servicePort: 3000
              path: "/logging-microservice"

当我调用https://example.com/logging-microservice/logs 后端服务生成时,

GET /logs --> 200

当我添加另外两个注释时

  nginx.ingress.kubernetes.io/limit-connections: 1
  nginx.ingress.kubernetes.io/limit-rps: 1

后端

GET /logging-microservice/logs --> 404

我无权查看那里生成的实际 nginx 配置。但是,想知道应用速率限制如何改变重写基础。

我已经尝试过限速open source nginx server,它按预期工作。从传递给上游 api 后端的 url 中删除路径可能会发生什么变化?


更新 :

我已经访问了集群并记录了发生的变化:

location ~* "^/logging-microservice" {
    rewrite "(?i)/logging-microservice" / break;
}
location ~* "^/" {
}

正在更改为

location /logging-microservice {

}
location / {
}

添加速率限制注释时。


标签: nginxurl-rewritingkubernetes-ingressapi-gateway

解决方案


即使你得到了 Ingress.yaml

nginx.ingress.kubernetes.io/rewrite-target: /

一切正常,你需要它

nginx.ingress.kubernetes.io/rewrite-target: "/"

另一件事是,注释的顺序很重要;

不可能:

  nginx.ingress.kubernetes.io/rewrite-target: "/"
  nginx.ingress.kubernetes.io/limit-connections: "1"
  nginx.ingress.kubernetes.io/limit-rps: "1"

它应该是 :

  nginx.ingress.kubernetes.io/limit-connections: "1"
  nginx.ingress.kubernetes.io/limit-rps: "1"
  nginx.ingress.kubernetes.io/rewrite-target: "/"

学会了艰难的方式!


推荐阅读