我正在使用与Docker-for-Mac捆绑在一起的Kubernetes。我正在尝试配置一个Ingress,将以/ v1 /开头的http请求路由到我的后端服务,并将/ ui /请求路由到我的Angular应用程序。
我的问题似乎是请求的HTTP方法是由Ingress(NGINX)从POST更改为GET。
我尝试了各种重写规则,但无济于事。我什至从Mac的Docker切换到Minikube,但结果是相同的。
如果我使用一个没有路径的简单入口(只是默认的后端),则该服务将获取正确的HTTP方法。 下面的入口有效:
sudo yum install libncurses*
但是此入口不会:</ p>
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
backend:
serviceName: backend
servicePort: 8080
当我调试“后端”服务时,我看到HTTP请求是GET而不是POST。
我读到某处NGINX重写发出308(永久)重定向,并且HTTP方法从GET更改为POST,但是如果是这种情况,我该如何配置我的入口以支持需要不同服务的不同路径POST电话?
答案 0 :(得分:0)
我找到了解决问题的方法。当我将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: 8080