Зуул Развертывание в Кубернетес - PullRequest
0 голосов
/ 08 февраля 2019

Я впервые пытаюсь развернуть архитектуру микросервисов в Kubernetes.Сначала я хотел использовать Ambassador в качестве своего шлюза API.У меня также есть служба аутентификации, которая проверяет пользователей и генерирует токен JWT, однако мне нужно проверять этот токен каждый раз, когда вызывается служба.Это представляет проблему перегрузки (поскольку каждый раз, когда API-шлюз получает трафик, он отправляется в эту внешнюю службу аутентификации для проверки токена JWT), и Ambassador не имеет возможности выполнить эту фильтрацию без использования внешней службы.

Использование шлюза Zuul кажется лучшим вариантом в этом случае, поскольку оно позволяет мне проверять токен JWT внутри шлюза (не через внешнюю службу, такую ​​как Ambassador).Однако я не уверен, как будет работать Zuul, если я разверну его в Kubernetes, поскольку, как я понимаю, Zuul требует адрес обнаружения службы (например, Eureka).

, если я разверну Zuulв моем кластере Kubernetes, как он сможет найти мои службы?

В местном масштабе, например, нет проблем, так как я использовал Eureka раньше, и я знал его адрес.Кроме того, я не думаю, что развертывание Eureka в Kubernetes будет хорошей идеей, поскольку она будет избыточной.

Если это невозможно сделать с помощью Zuul, есть ли другой API-шлюз или подход, где яможно проверить токены с помощью шлюза вместо использования внешней службы аутентификации, как это делает Ambassador?

Спасибо.

1 Ответ

0 голосов
/ 08 февраля 2019

В kubernetes у вас уже есть услуга "discovery", которая является kubernetes-service.Он находит модули и служит для них балансировщиком нагрузки.

Допустим, у вас есть конфигурация Zuul, подобная этой:

zuul:
  routes:
    books-service:
      path: /books/**
      serviceId: books-service

, которая направляет запросы, соответствующие /books/**, в службу books-service.Обычно у вас есть Eureka, которая дает вам реальный адрес books-service, но не сейчас.

И в этом вам может помочь лента - она ​​позволяет вам вручную настраивать маршрутизацию после того, как Zuul соответствует его запросу.Так что вам нужно добавить это в конфигурацию:

books-service.ribbon.listOfServers: "http://books:8080"

и после того, как Зуул найдет serviceId (books-service), он перенаправит запрос на books:8080

, а books:8080 простоkubernetes-service:

kind: Service
apiVersion: v1
metadata:
  name: books
spec:
  selector:
    app: spring-books-service
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 9376

Можно сказать, что это балансировщик нагрузки, который берет трафик с: 8080 и перенаправляет его на модули с меткой app: spring-books-service.

Все, что вам нужно сделать дальшеназначать ярлыки модулям (например, с помощью развертываний)

Кстати, вы можете настроить ленту подобным образом в любом приложении, и kubernetes найдет все ваши приложения (модули) с помощью своих служб, поэтому вам не понадобится служба обнаружения ввсе!А поскольку k8s-сервисы гораздо надежнее, чем Eureka, вы можете просто удалить его.

...