我的休闲配置有入口服务:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /api/?(.*)
backend:
serviceName: my-service
servicePort: 3001
- path: /auth/?(.*)
backend:
serviceName: my-service
servicePort: 3001
问题是,当我在minikube上运行它时,我无法以正确的方式进行连接,即。
在浏览器中输入IP/api/test
时,即使我的明确端点是,它也会显示not found
app.get('/api/test', (req, res) => {
return res.send({ hi: 'there' });
});
但是IP/api/api/test
(双api
)有效并可以提供预期的响应。显然,我想和IP/api/test
一起去那儿。如何在我的入口配置中实现该目标?
答案 0 :(得分:1)
是rewrite-target
弄乱了您的api链接,将其更改为nginx.ingress.kubernetes.io/rewrite-target: /
,您可以直接与/api/endpoint
进行通信。
example对此进行了解释,您还可以看到它正在使用rewrite-target: /app
在您的网址后附加占位符。
希望这会有所帮助。
答案 1 :(得分:1)
如果您要通过调用curl http://.../api/test
访问http://.../api/test
,则不需要重写,只需将其为空即可。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /?(.*)
backend:
serviceName: my-service
servicePort: 3001
- path: /auth/?(.*)
backend:
serviceName: my-service
servicePort: 3001
例如,此配置将重写以下内容:
http://.../api/test -> http://.../api/test
http://.../auth/test -> http://.../test
http://.../asdasdasd -> http://.../asdasdasd