入口服务-不同的改写

时间:2019-12-20 11:13:05

标签: kubernetes nginx-ingress

我的休闲配置有入口服务:

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一起去那儿。如何在我的入口配置中实现该目标?

2 个答案:

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