Kubernetes - можно ли избежать использования балансировщика нагрузки GCE для снижения затрат?

10

Я развертываю кластер Kubernetes на GCE, используя Gitlab-CI. Я хотел бы свести стоимость к минимуму - вот мои текущие настройки:

  • Узлы работают на 3 f1-microэкземплярах
  • Работающий системный модуль, Traefikнастроенный с помощью ServiceTypeLoadBalancer
  • Подстановочный знак днс настроен
  • 1 postgres стручок
  • 1 модуль веб-сервера с ingressнастроенным для Traefik

Я хотел бы уменьшить стоимость моего развертывания. Большая часть стоимости приходится на балансировщик нагрузки GCE. Есть ли способ использовать общедоступный IP-адрес вместо балансировщика нагрузки на GCE? Если да, могу ли я использовать IP-адрес, выделенный кластеру (вместо того, чтобы резервировать статический IP-адрес)?

Другими словами, есть ли способ привязать эфемерный ip к сервису Kubernetes, используя GCE без балансировщика нагрузки?

Есть ли какая-либо другая конфигурация, которую я могу сделать по-другому, которая снизит стоимость в целом на GCE?

Mitkins
источник
1
Вы можете предоставить свою службу, используя только тип службы NodePort, но это приведет к некоторым ограничениям в вашем развертывании. Для получения дополнительной информации посетите эту ссылку .
Кямран

Ответы:

10

Да, через ExternalIPs. Имейте в виду, что это будет означать, что ваша служба выйдет из строя, если узел, который назначил внешний IP-адрес, выйдет из строя, но если вы используете только 1 мастер, вы, вероятно, не будете особенно об этом беспокоиться.

Пример сервиса:

apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  ports:
    - port: 80
      protocol: TCP
  selector:
    app: myapp
  externalIPs:
    - a.b.c.d

IP-адрес должен быть внутренним IP-адресом экземпляра GCE (это связано с тем, что GCE DNAT передает трафик на внутренние IP-адреса). Сервис должен быть доступен через назначенный внешний IP-адрес узла.

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

ConnorJC
источник
2
Узнав о DNAT, я понял, что мне нужно настроить правило брандмауэра, чтобы разрешить трафик через определенные порты для экземпляра GCE. После этого я смог успешно реализовать ваше предложение. Я также успешно проверил NodePortверсию
Mitkins
2

Я предпочитаю не использовать облачные балансировщики нагрузки, если это необходимо, из-за стоимости и привязки к поставщику.

Вместо этого я использую это: https://kubernetes.github.io/ingress-nginx/deploy/

Это модуль, который запускает балансировщик нагрузки для вас. На этой странице есть замечания по установке GKE.

Майкл Коул
источник