Назад | Перейти на главную страницу

Маршрутизация существующего пути к другому поду с помощью nginx в Kubernetes

У меня есть приложение (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