Внешний IP узлов в кластере Kubernetes Engine

Если кластер обновляется или выходит из строя, 3 рабочих узла в кластере удаляются и создаются заново. В это время IP-адрес узла, выставленного наружу, изменяется. Чтобы решить эту проблему, есть ли способ сохранить IP, даже если я создам новый узел?

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

guillaume blaquiere 15.12.2020 13:12

Я должен согласиться с Гийомом Блакьером по поводу важности вашей установки. Вы должны отображать свои рабочие нагрузки с помощью Service типа LoadBalancer или Ingress. Вам не следует беспокоиться о внешних IP-адресах вашего узла. Если этот адрес требуется, поскольку ваша рабочая нагрузка подключается к какой-либо службе из белого списка, вам следует взглянуть на Cloud NAT. Пожалуйста, обновите свой вопрос с настройкой, которую вы пытаетесь достичь.

Dawid Kruk 15.12.2020 13:21
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
1
2
475
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

TL;DR

Вы не можете назначить статический IP-адрес узлу GKE и ожидать, что он будет таким же после того, как он был «воссоздан».

В случае сбоя узла или обновления узла он будет воссоздан с новым IP-адресом (предыдущий статический IP-адрес останется неиспользованным).

Вы можете создать узел GKE, а затем повысить свой Ephemeral IP до Static, но после сбоя/обновления узла он будет освобожден из ресурса (узла GKE).

Пожалуйста, ознакомьтесь с дополнительным объяснением ниже.


Я разделил этот раздел на 2 части:

  • Входящий трафик
  • Исходящий трафик

Входящий трафик (трафик, поступающий в кластер)

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

  • Service типа LoadBalancer, который создает L4 LoadBalancer (со своим IP), указывающим на все ваши узлы (в случае сбоя узла трафик будет отправлен на другой)
  • Ingress который создает L7 HTTP/HTTPS балансировщик нагрузки (со своим собственным IP), указывающий на все ваши узлы. (в случае сбоя узла трафик будет отправлен на другой узел)

Документация о Services в GKE:

Существует возможность показать вашу рабочую нагрузку с помощью Service типа NodePort, но следует отметить, что это все еще единственная точка отказа. С Service типа LoadBalancer у трафика есть много путей (узлов на выбор). С NodePort в случае сбоя узла ваше приложение/программное обеспечение будет недоступно.

Исходящий трафик (трафик, исходящий из кластера)

Если вас беспокоит трафик, исходящий из кластера, предназначенный для какой-либо конкретной службы из белого списка (например, DB в другом месте), вы можете использовать Cloud NAT:

Обзор облачного NAT

Cloud NAT (преобразование сетевых адресов) позволяет экземплярам виртуальной машины (ВМ) Google Cloud без внешних IP-адресов и частных кластеров Google Kubernetes Engine (GKE) отправлять исходящие пакеты в Интернет и получать любые соответствующие установленные входящие ответные пакеты.

Cloud.google.com: NAT: Документы: Обзор

При таком подходе вы можете создать частный кластер GKE. Ваши узлы будут иметь только внутренние IP-адреса. Затем вы можете настроить ранее упомянутый Cloud NAT, чтобы узлы направляли пакеты через Cloud Router. Все ваши узлы будут видны в Интернете с одного и того же статического IP-адреса, который не изменится в случае отказа любого узла.

Здесь у вас есть пример настройки:


С точки зрения сбоя узла и обновления узла я рекомендую вам проверить официальную документацию:

Вы также можете посмотреть на:

Другие вопросы по теме