Kubernetes NGINX Ingress将HTTP请求从POST更改为GET

时间:2019-05-16 22:08:39

标签: nginx kubernetes

我正在使用与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电话?

1 个答案:

答案 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