如何在 ingress-nginx 中使用 Lua 脚本

问题描述 投票:0回答:1

我想使用带有 ingress-nginx 的 Lua 脚本来阻止特定路径的流量。我创建了以下配置,但它没有按预期工作。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/server-snippet: |
      location /app-2 {
            rewrite_by_lua_block {
              ngx.status = 403;
              ngx.exit(ngx.HTTP_FORBIDDEN);
        }
      }
spec:
  rules:
    - http:
        paths:
          - path: /app-1
            pathType: Prefix
            backend:
              service:
                name: app-1
                port:
                  number: 80
          - path: /app-2
            pathType: Prefix
            backend:
              service:
                name: app-2
                port:
                  number: 80
              
~ curl http://A.B.C.D/app-2
<html><body><h1>It works!</h1></body></html>
kubernetes lua nginx-ingress
1个回答
0
投票

因此,这会在您的

location
中创建一个
nginx.conf
上下文(在
server
上下文下):

- path: /app-2
  pathType: Prefix
  backend:
    service:
      name: app-2
      port:
        number: 80

这也会创建一个具有相同名称的位置上下文:

location /app-2 {
      rewrite_by_lua_block {
        ngx.status = 403;
        ngx.exit(ngx.HTTP_FORBIDDEN);
  }
}

这一个可能是在另一个之上定义的,因此它会覆盖它。

你可以用这个来检查:

kubectl cp <nginx-ingress-controller-pod> -c nginx nginx.conf nginx.conf
cat nginx.conf
© www.soinside.com 2019 - 2024. All rights reserved.