【问题标题】:Nginx ingress rule for changing path on the fly用于动态更改路径的 Nginx 入口规则
【发布时间】:2019-11-28 01:59:30
【问题描述】:

我想即时更改进入 ingress-nginx 的请求路径,以匹配不同后端服务的期望。例如,想象一下这是我得到的两项服务:

foo 服务:

http://foo:8080/api/v1

酒吧服务:

http://bar:8080/api/v1

我想将 foo 服务公开为 http://test.com/foo/api,将 bar 服务公开为 http://test.com/bar/api。但是,我不确定如何动态更改路径以匹配底层服务的期望。

示例 ingress.yaml 文件:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress

spec:
  rules:
    - host: test.com
      http:
        paths:
          - path: /foo/api/
            backend:
              serviceName: foo
              servicePort: 8080
          - path: /bar/api
            backend:
              serviceName: bar
              servicePort: 8080
          - path: /
            backend:
              serviceName: ui
              servicePort: 80

【问题讨论】:

    标签: nginx kubernetes-ingress nginx-ingress


    【解决方案1】:

    您可以尝试重写注释。

    看看这个documentation中提供的例子:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$2
      name: rewrite
      namespace: default
    spec:
      rules:
      - host: rewrite.bar.com
        http:
          paths:
          - backend:
              serviceName: http-svc
              servicePort: 80
            path: /something(/|$)(.*)
    

    在此入口定义中,(.*) 捕获的任何字符都将分配给占位符 $2,然后将其用作 rewrite-target 注释中的参数。

    例如,上面的入口定义将导致以下重写:

    • rewrite.bar.com/something 重写为 rewrite.bar.com/
    • rewrite.bar.com/something/ 重写为 rewrite.bar.com/
    • rewrite.bar.com/something/new 重写为 rewrite.bar.com/new

    只需使用您的数据调整路径和其他变量。

    如果有帮助,请告诉我。

    【讨论】:

    • 您能否详细说明如何使用重写来解决我的问题?
    • 我已经用更多细节和更好的例子更新了我的答案。您可能需要为您的两个服务创建两个 Ingress。请让我知道这是否足以让您解决问题。
    猜你喜欢
    • 1970-01-01
    • 2021-06-25
    • 2018-11-25
    • 2018-09-04
    • 2020-11-14
    • 2019-07-24
    • 1970-01-01
    • 2021-12-27
    • 2016-07-29
    相关资源
    最近更新 更多