Kubernetes ingress没有在某些路径上重定向,比如“/ myapp”,但仅适用于“/”

时间:2017-07-19 15:21:00

标签: kubernetes docker-ingress

我有一个像http://localhost:8000/ps/app/ui/?pid=201这样的网址上运行的容器。容器部署在kubernetes上并以“ps-app-ui:8000”的形式暴露给服务 我想创建一个可以从外部访问的入口。 Ingress模板就像:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ps-ingress
spec:
  rules:
  - http:
      paths:
      - path: /myapp/
        backend:
          serviceName: ps-app-ui
          servicePort: 8000

问题是它无法使用此入口。我也尝试添加“ingress.kubernetes.io/rewrite-target:/”但没有成功。任何人都可以通过“http://INGRESS-IP/myapp/ps/app/ui/?pid=201

帮助我访问我的应用程序

真的很感激。

3 个答案:

答案 0 :(得分:0)

我在想

- path: /myapp/

http://myapp/myapp/

与您的应用匹配

所以,如果我有一个定义:

  - host: app.example.com
    http:
      paths:
      - path: /myapp

这将是http://app.example.com/myapp

答案 1 :(得分:0)

如果您想使用http://myapp/ps/app/ui/?pid=201,则需要:

  • 确保您的操作系统将myapp转换为您的入口控制器正在侦听的IP地址
  • host myapp添加到ingress
  • 您可以将路径留空(假设您的应用程序正在处理完整的/ps/app/ui/?pid=201路径)

这导致

rules:
  - host: myapp
    http:
      paths:
      - backend:
          serviceName: ps-app-ui
          servicePort: 8000

此入口会将所有流量转发给主机myapp到您的服务

答案 2 :(得分:0)

入口版本0.22.0或更高版本更改了重写目标的工作方式。 您需要对路径进行正则表达式匹配,然后将其添加到重写目标。

nginx.ingress.kubernetes.io/rewrite-target: /$2
...
...
  rules:
  - host: rewrite.bar.com
    http:
      paths:
      - backend:
          serviceName: http-svc
          servicePort: 80
        path: /something(/|$)(.*)

请参阅更改日志here。 如何撰写here