首页 文章

具有多个目标重写的kubernetes ingress

提问于
浏览
4

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

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"

我似乎没有在文档中找到答案 .

1 回答

  • 5

    不幸的是,基于免费版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请求被重定向到/ coffee /) .

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

相关问题