【发布时间】:2020-11-26 05:22:07
【问题描述】:
我有以下 ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-configuration-snippet
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/server-snippet: |
location /base/path/v1/api/update {
deny all;
return 404;
}
spec:
rules:
- http:
paths:
- path: /base/path(/|$)(.*)
backend:
serviceName: myApi
servicePort: 8080
但是当我将 PUT 请求发送到 /base/path/v1/api/update 而不是得到 404 时,我得到的是 500,这意味着可以从入口控制器访问路径。谁能帮我找出原因?
我改成configuration-sn-p,我得到的错误是:
Error: exit status 1
2020/08/06 18:35:07 [emerg] 1734#1734: location "/base/path/v1/api/update" is outside location "^/base/path(/|$)(.*)" in /tmp/nginx-cfg008325631:2445
nginx: [emerg] location "/base/path/v1/api/update" is outside location "^/base/path(/|$)(.*)" in /tmp/nginx-cfg008325631:2445
nginx: configuration file /tmp/nginx-cfg008325631 test failed
【问题讨论】:
-
您是否拉下生成的
nginx.conf并确保它写在您期望的位置?另外,这有点迂腐,the fine manual 说“每个主机一次”,但你没有主机——所以,他们可能只是直接不做(希望在控制器日志中记录一些内容) -
是的,它没有操作。关于如何实现这一目标的任何想法?
-
一种方法是实际声明一个
host:值,看看这是否使它不那么生气,另一种方法是使用server-snippet:ConfigMap 设置 -
实际上我添加了更多描述,我尝试了 configuration-sn-p,它似乎不再是 no op 了。但现在出现错误。虽然无法理解错误
-
那么,您是否将生成的配置从控制器 pod 中复制出来并查看它? nginx 的配置是一片狂野而神秘的土地,但是不看配置文件,谁也无法猜哪里出了问题
标签: kubernetes kubernetes-helm kubernetes-ingress nginx-ingress