【问题标题】:kubernetes ingress with multiple target-rewrite具有多个目标重写的 kubernetes 入口
【发布时间】:2018-09-05 23:16:28
【问题描述】:

通常入口重写目标的工作方式如下:

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

这将重写您的服务名称的目标,因为它们在根目录中。所以如果我有这个:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: demo-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  rules:
    http:
      paths:
      - path: /
        backend:
          serviceName: front-main
          servicePort: 80
      - path: /api
        backend:
          serviceName: back-main
          servicePort: 80

我的服务将接收/ 中的数据。但是,我希望我的服务front-main 发送根/ 和服务器back-main 发送/someotherpath/。我该怎么做?

有没有类似下面这行的?

nginx.ingress.kubernetes.io/rewrite-target: "front-main: / ; back-main: /someotherpath"

我似乎在文档中找不到答案。

【问题讨论】:

    标签: kubernetes kubernetes-ingress


    【解决方案1】:

    很遗憾,基于 Nginx 免费版的 Ingress 没有该功能。

    但是,如果你可以使用Nginx Plus based Ingress,你可以通过注解来实现。

    这是来自官方仓库的example

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: cafe-ingress
      annotations:
        nginx.org/rewrites: "serviceName=tea-svc rewrite=/;serviceName=coffee-svc rewrite=/beans/"
    spec:
      rules:
      - host: cafe.example.com
        http:
          paths:
          - path: /tea/
            backend:
              serviceName: tea-svc
              servicePort: 80
          - path: /coffee/
            backend:
              serviceName: coffee-svc
              servicePort: 80
    

    以下是对tea-svc 的请求的 URI 如何重写的示例(注意 /tea 请求被重定向到 /tea/)。

    /tea/ -> /
    /tea/abc -> /abc
    

    以下是对coffee-svc 的请求的 URI 如何重写的示例(注意 /coffee 请求被重定向到 /beans/)。

    /coffee/ -> /beans/
    /coffee/abc -> /beans/abc
    

    【讨论】:

    • 其实我之前用过nginxinc/kubernetes-ingress,不过希望有更好的解决方案。
    • 自此发布以来,Nginx Ingress 0.22.0 已发布,其中包含用于重定向的新语法 (github.com/kubernetes/ingress-nginx/tree/master/docs/examples/…)。我认为现在可以通过选择正确的捕获组来解决 OP 的问题。也许 Anton 的例子也可以使用两个独立的 ingresses 和两个不同的重写规则来解决。
    • 有人已经找到如何用这种新语法解决这个问题了吗?有什么可行的例子吗?
    【解决方案2】:

    另一种解决方案是创建两个入口 yaml 文件

    每一个都使用不同的注释。有效!

    【讨论】:

    • 看看这是如何使用同一主机完成的将是有益的。在野外有没有一个例子? @JuanEnciso 您能否详细了解这是如何完成的?我希望它可以使用相同的“主机”来完成,我不想将我的 API 放在单独的端点上。在这种情况下。
    • 抱歉,又看了一遍,是的,我刚刚弄好了。负载均衡器 IP 应该保持不变,只是更好地重定向流量。我真的应该转过头来,这些只是将配置传递给另一个服务中的 nginx,真的。
    猜你喜欢
    • 2020-10-13
    • 2019-07-01
    • 2020-04-30
    • 1970-01-01
    • 2021-11-20
    • 2018-05-29
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多