【问题标题】:Using nginx.ingress.kubernetes.io/rewrite-target gives "default backend - 404"使用 nginx.ingress.kubernetes.io/rewrite-target 给出“默认后端 - 404”
【发布时间】:2021-03-12 01:15:17
【问题描述】:

我有一个在 kubernetes 中运行的应用程序,我可以从我的浏览器在集群外部访问:

http://myapp.internal/myapp/content

使用以下入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  labels:
    app.kubernetes.io/instance: myapp
    app.kubernetes.io/name: myapp
  name: myapp
  namespace: samples
spec:
  rules:
  - host: myapp.internal
    http:
      paths:
      - backend:
          serviceName: myapp
          servicePort: 8080
        path: /myapp/content
status:
  loadBalancer:
    ingress:
    - {}

现在我想访问它:

http://myapp.internal/content

而不是修改我的应用程序(目前不是一个选项)。

基于:

https://kubernetes.github.io/ingress-nginx/examples/rewrite/

看来我可以做到:

nginx.ingress.kubernetes.io/rewrite-target: /myapp/content

所以我更新了我的入口,如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /myapp/content
  labels:
    app.kubernetes.io/instance: myapp
    app.kubernetes.io/name: myapp
  name: myapp
  namespace: samples
spec:
  rules:
  - host: myapp.internal
    http:
      paths:
      - backend:
          serviceName: myapp
          servicePort: 8080
        path: /content
status:
  loadBalancer:
    ingress:
    - {}

我现在假设当我进入时:

http://myapp.internal/content

在我的浏览器中,上面的 rewrite-target 规则然后将其转换为:

http://myapp.internal//myapp/content

它实际上是这样做的。但我没有看到我的内容,而是得到了:

default backend - 404

基本上我需要这个例子的反面:

https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/rewrite

原来的例子说:

rewrite.bar.com/something/new rewrites to rewrite.bar.com/new

我需要的地方:

rewrite.bar.com/new rewrites to rewrite.bar.com/something/new

我错过了什么?

【问题讨论】:

    标签: nginx kubernetes


    【解决方案1】:

    其实你不需要设置nginx.ingress.kubernetes.io/rewrite-target: /myapp/content。通过路径/myapp/content 了解流程,您正在访问myapp 服务,因此您应该只替换路径(因为您想重定向路径)path: /content,它会正常工作。现在,如果您点击/content 路径,那么它将转到与之前的/myapp/content 相同的服务(名为myapp)。

    yaml 应该是这样的:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      labels:
        app.kubernetes.io/instance: myapp
        app.kubernetes.io/name: myapp
      name: myapp
      namespace: samples
    spec:
      rules:
      - host: myapp.internal
        http:
          paths:
          - backend:
              serviceName: myapp
              servicePort: 8080
            path: /content
    status:
      loadBalancer:
        ingress:
    

    更新

    其实你的问题还不清楚,你想打http://myapp.internal/content重定向到http://myapp.internal/myapp/content?如果这是您正在寻找的内容,那么通过更改入口是不可能的,因为您的 ingresd 将匹配到 http://myapp.internal 并且其余部分 /content 将转到您的服务支持的 pod,现在如果在您的服务支持的 pod 中,您有 myapp/内容那么您如何发送内容来获得它?

    您可以做的一件事是:运行一个 pod,您需要在其中运行另一个具有 /content 路径的应用程序,它只会重定向到 myapp/content pod,两个 pod 都可以由 myapp 服务支持

    【讨论】:

    • 同样的错误,但是这个 HTTP 状态 404 – 未找到。我的应用在 /content 处不提供任何服务,这是我的帖子/问题的重点。
    • 其实你的问题不是很清楚,要打http://myapp.internal/content重定向到http://myapp.internal/myapp/content吗?如果这是您正在寻找的内容,那么通过更改入口是不可能的,因为您的 ingresd 将匹配直到 http://myapp.internal 并且其余部分 /content 将转到您的服务支持的 pod,现在如果在您的服务支持的 pod 中,您有 @ 987654339@ 那么如何发送content 来获取呢?
    【解决方案2】:

    我认为你会成功的。重写目标是指流量应该被重定向到的URL。

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/app-root: /myapp/content
      labels:
        app.kubernetes.io/instance: myapp
        app.kubernetes.io/name: myapp
      name: myapp
      namespace: samples
    spec:
      rules:
      - host: myapp.internal
        http:
          paths:
          - backend:
              serviceName: myapp
              servicePort: 8080
            path: /content
    status:
      loadBalancer:
        ingress:
        - {}
    

    【讨论】:

    • 同样的错误仍然是 404。我也试过`nginx.ingress.kubernetes.io/rewrite-target: $1`
    • 这给出了 HTTP 状态 404 - 未找到。从另一个答案看来,它似乎不可能完成我所需要的。
    • 是的,我也这么认为。但是让我们最后尝试一下 app-root: /myapp/content 和 path:/content
    • 同样的错误,所以可能需要想出一些其他的解决方案
    猜你喜欢
    • 2021-07-05
    • 2019-10-10
    • 2022-01-27
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    相关资源
    最近更新 更多