Tengo dos servicios serviceOld serviceNew
Quiero lograr el siguiente efecto.
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: 8080Probé varios métodos y no logré el objetivo. ¿Alguien puede ayudarme?
Todo lo que necesita sobre la annotation de reescritura y path se puede encontrar en Ingress Rewrite Docs .
Según el ejemplo en el sitio:
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(/|$)(.*)Redireccionará:
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/newEn tu caso debería verse así:
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: 8080Descubrí que mi versión es relativamente antigua. En la versión anterior, si los puertos son diferentes, no funcionará correctamente. Cambie al mismo puerto o actualice la versión de ingreso