Jak mogę udostępnić światu usługi hostowane przez Kubernetes w AWS?

3

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.

Dan Ellis
źródło
Znalazłem kube-lego , przynajmniej jeśli muszę iść drogą nginx.
Dan Ellis,

Odpowiedzi:

2

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:

spec:
  restartPolicy: Always
  dnsPolicy: ClusterFirst
  hostNetwork: true
  nodeSelector:
    mynodelabel/ingress: nginx

i

  ports:
    - containerPort: 80
      hostPort: 80
    - containerPort: 443
      hostPort: 443

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.

Cohadar
źródło