Jak poprawnie zaimplementować Spring Security dla wszystkich mikroserwisów na Kubernetesie?

0

Cześć, mam taką architekturę aplikacji.

Chciałbym dodać Spring Security do mojego projektu i zastanawiam się, jaki będzie najlepszy sposób. Rozważam dodanie osobnej mikro usługi z użyciem Spring Cloud Gateway, a następnie implementację tam modułu Spring Security - tylko tam. Będzie ona działać jak proxy do uwierzytelniania użytkowników.

Jednak z drugiej strony będę musiał skonfigurować tam plik z "routingiem" dla każdej usługi i kwestie zabezpieczeń w języku Java... Dodatkowy poziom zależności i abstrakcji.

Takie podejście widziałem w wielu projektach; jednak robiąc to, stracę funkcjonalność dostarczaną przez NGINX, gdzie wszystko jest skonfigurowane na podstawie nazw usług Kubernetes i jest przekierowywane automatycznie. Nawet nie zdawałem sobie sprawy jak to się prosto konfiguruje.

Jakie powinienem obrać podejście?

Aktualnie moja architektura działa całkiem dobrze, korzystam z natywnego podejścia przy użyciu Spring Cloud Kubernetes, i chciałbym uniknąć dodatkowych zależności takich jak Spring Cloud Gateway/Eureka/Zuul/Ribbon itp.

Dziękuję!

image

1

Chcesz, żeby do aplikacji mieli dostęp tylko zalogowani użytkownicy?
Ja bym spróbował z tym: https://www.keycloak.org/
Chyba najlepszym rozwiązaniem byłby token jwt

0

Dzięki za odpowiedź, ale ja nie chciałbym dodawać dependencji spring-keycloak do każdego mikroserwisu. Co w przypadku gdybym miał ich więcej? Musiałbym dodawać do każdego z kolei.

Innym rozwiązaniem jest zrobić gateway w Springu, używając aplikacji Spring Cloud Gateway. Z kolei tutaj powstaje problem jak to pożenić z NGINX który mam aktualnie i znakomicie sobie radzi. Po co mi dwa Gateway'e w takim razie?

Moje pytanie bardzo dotyczyło koncepcji architektury mikroserwisów jak to ugryźć. Osobiście uważam że powinienem to zrobić na poziomie Kubernetesa, bez pisania kodu. Są takie moduły jak Ingress/Nginx Keycloak,
https://ibrahimhkoyuncu.medium.com/kubernetes-ingress-external-authentication-with-oauth2-proxy-and-keycloak-9924a3b2d34a

ale chciałbym wysłuchać opinii innych.

1
Sambor_Dev napisał(a):

uważam że powinienem to zrobić na poziomie Kubernetesa, bez pisania kodu

Takie coś to chyba już masz, bo to Ingress :P Spring Security to już bezpieczeństwo danego serwisu - czyli Ingress Ci gwarantuje, że nagle Hindus Ci nie wbije do apki, ale jeśli dodasz go do zaufanych w ingresie, to idziemy warstwę dalej - na poziom aplikacji. No i tam, to już musisz pisać w kodzie, tego nie unikniesz IMO.

0

@Sambor_Dev z tego opisu nie rozumiem co chcesz osiągnąć, a jedynie, że chcesz zminimalizować zależności. Możesz doprecyzować jakie scenariusze dotyczące security chcesz pokryć? Tak by to oddzielić CO chcesz, od JAK to zrobić.

0

Jaki jest sens tworzenia warstwy security w 100% serwisów? Te publiczne jak najbardziej, te wewnątrz sieci, mniej krytyczne imho niekoniecznie lub z jakimś Basic auth/jwt.

Ten schemat wygląda dziwnie. Czemu z ingresa nie leci do gatewaya a od niego do poszczególnych aplikacji. Po co ten gateway skoro ruch tylko z niego wychodzi zamiast też wchodzić w jakimś centralnym punkcie?

1

Hej, coś takiego mi się wyklarowało w takim razie. Dziękuję za pomoc
Untitled-2024-01-08-1334.png

1

Poczytaj OPie trochę o architekturze mikroserwisowej bo patrząc na ten najnowszy schemat i tę współdzielona bazę danych mam wrażenie, że kompletnie nie wiesz co robisz ;)

TL;DR:
Współdzielona baza między usługami to źródło wszelkiego zła ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1