14

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

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发送 root/并让服务器back-main发送/someotherpath/. 我怎样才能做到这一点?

是否有类似以下行的内容?

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

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

4

2 回答 2

12

不幸的是,基于免费版 Nginx 的 Ingress 没有该功能。

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

这是官方回购的一个例子

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
于 2018-03-30T10:57:54.920 回答
7

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

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

于 2020-03-17T18:03:29.297 回答