входное несоответствие нескольких путей - PullRequest
1 голос
/ 07 апреля 2020

У меня есть два сервиса serviceOld serviceNew

Я хочу добиться следующего эффекта

http://host/any         => http://serviceOld/any
http://host/any/aaa     => http://serviceOld/any/aaa
http://host/feature     => http://serviceNew/feature
http://host/feature/bbb => http://serviceNew/feature/bbb
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-by-header: new
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: v2
  namespace: api
spec:
  rules:
  - host: xxx.com
    http:
      paths:
      - path: /
        backend:
          serviceName: serviceOld
          servicePort: 80
      - path: /feature/*
        backend:
          serviceName: serviceNew
          servicePort: 8080

Я пробовал несколько методов и не смог достичь цели. Кто-нибудь может мне помочь?

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Все, что вам нужно о перезаписи annotation и path, можно найти в Ingress Rewrite Docs .

Согласно примеру на сайте:

apiVersion: networking.k8s.io/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(/|$)(.*)

Он будет перенаправлять:

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

В вашем случае это должно выглядеть так:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  name: v2
  namespace: api
spec:
  rules:
  - host: xxx.com
    http:
      paths:
      - path: /any(/|$)(.*)
        backend:
          serviceName: serviceOld
          servicePort: 80
      - path: /feature(/|$)(.*)
        backend:
          serviceName: serviceNew
          servicePort: 8080
0 голосов
/ 19 апреля 2020

Я обнаружил, что моя версия относительно старая. В старой версии, если порты разные, он не будет работать должным образом. Перейдите на тот же порт или обновите входную версию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...