我正在使用与Docker-for-Mac捆绑在一起的Kubernetes。我正在尝试配置一个Ingress,它将以/v1/开头的http请求路由到我的后端服务,并将/ui/请求路由到我的Angular应用程序。
我的问题似乎是请求的HTTP方法被入口(NGINX)从POST更改为GET。
我尝试了各种重写规则,但都没有用。我甚至从Docker-for-Mac切换到了Minikube,但结果是一样的。
如果我使用一个没有路径的简单入口(只有默认的后端),那么服务将获得正确的HTTP方法。下面的入口有效:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
backend:
serviceName: backend
servicePort: 8080但是这个入口没有:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- http:
paths:
- path: /v1
backend:
serviceName: backend
servicePort: 8080
- path: /ui
backend:
serviceName: webui
servicePort: 80当我调试“后端”服务时,我发现HTTP请求是GET而不是POST。
我在某处读到NGINX重写发出308 (永久)重定向,HTTP方法从GET更改为POST,但如果是这种情况,我如何配置我的入口来支持需要POST调用的不同服务的不同路径?
发布于 2019-05-21 02:58:38
我找到了我的问题的解决方案。当我将host:添加到配置中时,http方法没有改变。这是我当前的入口yaml (重写和正则表达式用于省略将/v1作为后端URL的一部分发送)
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- host: localhost
http:
paths:
- path: /v1(/|$)(.*)
backend:
serviceName: gateway
servicePort: 8080https://stackoverflow.com/questions/56177198
复制相似问题