Я хотел бы использовать сценарий Lua с ingress-nginx, чтобы заблокировать трафик по определенному пути. Я создал приведенную ниже конфигурацию, но она не работает должным образом.
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>
Итак, это создает контекст 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
Вот почему вы минусуете? Вместо этого вы могли бы предложить изменение?
не стесняйтесь редактировать его, и я буду рад проголосовать за ваш комментарий, не беспокойтесь
Это считается плохой практикой, поскольку при следующем перезапуске модуля nginx конфигурация будет потеряна. Предпочитаю использовать источник фрагмента конфигурации: kubernetes.github.io/ingress-nginx/user-guide/…