Как сопоставить несколько сервисов с одним входом, используя AWS ALB в качестве контроллера входа?

#amazon-web-services #kubernetes #amazon-eks #aws-application-load-balancer

#amazon-веб-сервисы #kubernetes #amazon-eks #aws-application-балансировщик нагрузки

Вопрос:

У меня есть один вход (пример, www.a.com ). Я сопоставил корень со службой, например:

 - backend:
    serviceName: ui-svc
    servicePort: 80
  path: /
 

Это перенаправляет к правильной службе при переходе к www.a.com . Я хочу подключить другую службу в / api, например:

 - backend:
    serviceName: api-svc
    servicePort: 80
  path: /api
 

Маршрутизация к www.a.com/api работает нормально, однако любые конечные конечные точки получают 404’d (и т. Д www.a.com/api/swagger , даже если эта конечная точка смонтирована в самом приложении (spring application)). Ранее, используя Traefik, я использовал rewriteTarget: / аннотацию, чтобы исправить это, однако ALB это не поддерживает. Есть ли собственный способ kubernetes, которым я могу решить эту проблему?

Я использую kubernetes 1.17 и EKS в качестве своей платформы kubernetes.

Ответ №1:

Вы можете использовать регулярные выражения для сопоставления пути

 - backend:
    serviceName: api-svc
    servicePort: 80
  path: /api/.*

 

Это можно включить, установив эту аннотацию в развертывании ingress:

 nginx.ingress.kubernetes.io/use-regex: "true"
 

дополнительная информация https://kubernetes.github.io/ingress-nginx/user-guide/ingress-path-matching /

Комментарии:

1. К сожалению, я не использую nginx в качестве входа (используя alb), поэтому это правило недоступно.

2. Вы все еще можете использовать * in the path, верно? kubernetes-sigs.github.io/aws-load-balancer-controller/guide/…

Ответ №2:

С тех пор это было исправлено путем добавления

server.servlet.context-path=/*relvantPathName*

В качестве переменной среды для контейнеров. Это специфичная для spring вещь, где для работы необходимо переписать корень.