Назад | Перейти на главную страницу

Как я могу предоставить миру свои сервисы, размещенные в Kubernetes, на AWS?

У меня есть кластер Kubernetes на AWS, который установлен с использованием kops (публичная топология). Одно из моих развертываний - это веб-сервер, который я хотел бы открыть через CloudFront, а другой - сервер API, который я хотел бы открыть через ALB.

В обоих случаях это будет означать, что о сертификатах позаботятся обо мне. В частности, для сервера API для меня важно иметь клиентские IP-адреса, поэтому мне нужна балансировка нагрузки HTTP, а не только TCP. Я также использую WebSockets, поэтому мне нужен ALB, а не ELB.

Создание «внешней службы» дает мне балансировщик нагрузки TCP ELB. Что касается веб-сервера, я мог бы просто указать CloudFront (стабильный ли эластичный IP-адрес?) Для TLS и кеширования. Для сервера API я мог бы указать на него ALB, но это кажется немного избыточным.

Согласно k8s документация, Я должен использовать контроллер входящего трафика nginx за ELB, но тогда я должен предоставить сертификаты для nginx (интегрировано ли решение с Let's Encrypt вообще?), И я потеряю IP-адрес клиента. К сожалению, примеры еще не написаны.

Какое в настоящее время правильное решение для того, что я хочу делать? Полагаю, это довольно частый случай.

Вам не нужны ELB и ALB.

Выделите некоторые из узлов вашего кластера в качестве узлов балансировки нагрузки. Поместите их в другую группу узлов, дайте им какой-нибудь ярлык: mynodelabel/ingress: nginx, а затем в этой группе узлов размещается демон входящего трафика nginx.

Наиболее важные варианты:

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

и

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

Таким образом вы получаете чистый пользовательский трафик!

Контроллер входящего трафика Nginx отлично работает с kube-lego Let's Encrypt!

Назначьте эластичные IP-адреса своим узлам балансировки нагрузки k8s и просто укажите на них DNS-запись route53.

При желании вы можете испортить свои узлы балансировки нагрузки, чтобы обычные модули не работали с ними и замедляли работу nginx.