У меня есть приложение (demoapp) в GKE, которое доступно в Интернете с входом GCE следующим образом:
- host: demoapp.com
http:
paths:
- backend:
serviceName: demoapp-service
servicePort: 80
У приложения много клиентов, каждый из которых имеет свою страницу со схемой пути, например demoapp.com/customers/customer1. Я развертываю новую версию приложения (demoapp2) и хотел бы сначала получить отзывы от определенных клиентов. Таким образом, я хотел бы направить определенные пути клиентов в новое приложение вместо старого, чтобы, например, demoapp.com/customers/customer1 разрешит путь demoapp2-service вместо пути demoapp-service. Однако это не работает:
- host: demoapp.com
http:
paths:
- backend:
serviceName: demoapp2-service
servicePort: 80
path: /customers/customer1
- backend:
serviceName: demoapp-service
servicePort: 80
Я пробовал другие варианты, например, добавление path: /
или path: /*
для маршрутизации demoapp-service, но я предполагаю, что рабочий URL-адрес будет demoapp.com/customers/customer1/customers/customer1, даже если по умолчанию путь не переопределен. Затем я подумал, что у меня может быть что-то вроде этого в конфигурации demoapp nginx:
location /customers/customer1 {
proxy_pass http://demoapp2-service/customers/customer1;
}
Но это тоже не работает, и я ничего не вижу в журналах. Кто-нибудь знает, как эту схему снять?
Вы можете копаться в Контроллер входящего трафика NGINX Plus переписать функциональность аннотации и подогнать ее под свои нужды.
Пожалуйста найди официальный пример здесь.
Пример: В следующем примере мы балансируем нагрузку двух приложений, требующих перезаписи URI:
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