Mam klaster Kubernetes na AWS, który został zainstalowany przy użyciu kops
(topologii publicznej). Jedno z moich wdrożeń to serwer WWW, który chciałbym udostępnić za pośrednictwem CloudFront, a drugi to serwer API, który chciałbym udostępnić za pośrednictwem ALB.
W obu przypadkach oznaczałoby to załatwienie certyfikatów. W szczególności dla serwera API ważne jest, aby mieć adresy IP klienta, dlatego potrzebuję równoważenia obciążenia HTTP, a nie tylko TCP. Używam również WebSockets, więc potrzebuję ALB, a nie ELB.
Utworzenie „usługi zewnętrznej” daje mi moduł równoważenia obciążenia ELB TCP. W przypadku serwera WWW mogę po prostu wskazać CloudFront (czy elastyczny adres IP daje mu stabilność?) Dla TLS i buforowania. W przypadku serwera API mógłbym wskazać ALB, ale wydaje się to trochę zbędne.
Zgodnie z dokumentacją k8s , powinienem użyć kontrolera wejściowego nginx za ELB, ale potem muszę dostarczyć certyfikaty do nginx (czy rozwiązanie jest w ogóle zintegrowane z Let's Encrypt?), A straciłbym adres IP klienta. Niestety przykłady nie zostały jeszcze napisane.
Jakie jest obecnie właściwe rozwiązanie tego, co chcę robić? Przypuszczam, że to dość powszechny przypadek.
źródło
Odpowiedzi:
Nie potrzebujesz ELB i ALB.
Poświęć niektóre węzły klastra na węzły równoważenia obciążenia. Umieść je w innej grupie węzłów, nadaj im etykietę
mynodelabel/ingress: nginx
:, a następnie umieść na tej grupie węzłów demon ingress ingresu nginx.Najważniejsze opcje to:
i
W ten sposób uzyskujesz nieprzerwany ruch użytkowników!
Kontroler wejścia Nginx doskonale współpracuje z kube-lego Let's Encrypt!
Przypisz elastyczne adresy IP do węzłów modułu równoważenia obciążenia k8s i po prostu wskaż na nich wpis DNS route53.
Opcjonalnie możesz skazić węzły loadbalancera, aby zwykłe strąki nie działały na nich i spowolniły nginx.
źródło