【问题标题】:Kubernetes ingress not working on redirect on some path like "/myapp", but only working for "/"Kubernetes 入口不适用于“/myapp”等路径上的重定向,但仅适用于“/”
【发布时间】:2017-12-24 23:25:39
【问题描述】:

我有一个容器在像 http://localhost:8000/ps/app/ui/?pid=201 这样的 url 上运行。该容器部署在 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”访问我的应用程序

将不胜感激。

【问题讨论】:

  • /myapp/后面加一个星号:/myapp/*
  • 这是... Minikube 吗?
  • 实际上在进入之后是绝对路径和相对路径的问题。我的应用程序期望 url 为 localhost:8000/ps/app/ui/?pid=201 但在 ingressurl 变为 localhost:8000/myapp/ps/app/ui/?pid=201 之后它失败了。 @NorbertvanNobelen
  • @ShahzebKhan 有什么解决办法吗?
  • 正是我遇到的问题。你能分享一下你是怎么解决的吗?

标签: kubernetes docker-ingress


【解决方案1】:

Ingress 0.22.0 或更高版本改变了 rewrite-target 的工作方式。 您需要对路径进行正则表达式匹配并将其添加到重写目标。

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

请参阅更新日志here。 如何发文here

【讨论】:

    【解决方案2】:

    我在想

    - path: /myapp/
    

    http://myapp/myapp/匹配您的应用

    所以如果我有一个定义:

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

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

    【讨论】:

      【解决方案3】:

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

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

      这会导致

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

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

      【讨论】:

      • 我真正想要的是让我的应用程序在 http:///myapp/ps/app/ui/?pid=201 上运行。应用程序本身在路径 /ps/app/ui/?pid=201 上提供但问题是使用入口将此 myapp 路径添加到应用程序路径并使事情变得模棱两可。路径 /(空)工作正常,但添加任何字符串都会使其停止工作
      • 好的,我看到你编辑了你的问题......在这种情况下:尝试不使用主机,但将/myapp(不带斜杠)设置为路径。而且您的应用程序也需要监听 /myapp 部分,因为据我所知,该部分不会从请求中删除!
      • 我刚刚发现您可以通过向入口添加一些元数据来影响保持路径的行为:apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: ingress.kubernetes.io/rewrite-target: / 参见github.com/kubernetes/ingress/tree/master/examples/rewrite/…
      猜你喜欢
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 2010-12-08
      • 2019-01-16
      • 1970-01-01
      • 2011-06-08
      • 2018-10-02
      • 1970-01-01
      相关资源
      最近更新 更多