Если кластер обновляется или выходит из строя, 3 рабочих узла в кластере удаляются и создаются заново. В это время IP-адрес узла, выставленного наружу, изменяется. Чтобы решить эту проблему, есть ли способ сохранить IP, даже если я создам новый узел?
Я должен согласиться с Гийомом Блакьером по поводу важности вашей установки. Вы должны отображать свои рабочие нагрузки с помощью Service
типа LoadBalancer
или Ingress
. Вам не следует беспокоиться о внешних IP-адресах вашего узла. Если этот адрес требуется, поскольку ваша рабочая нагрузка подключается к какой-либо службе из белого списка, вам следует взглянуть на Cloud NAT. Пожалуйста, обновите свой вопрос с настройкой, которую вы пытаетесь достичь.
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) отправлять исходящие пакеты в Интернет и получать любые соответствующие установленные входящие ответные пакеты.
При таком подходе вы можете создать частный кластер GKE. Ваши узлы будут иметь только внутренние IP-адреса. Затем вы можете настроить ранее упомянутый Cloud NAT, чтобы узлы направляли пакеты через Cloud Router. Все ваши узлы будут видны в Интернете с одного и того же статического IP-адреса, который не изменится в случае отказа любого узла.
Здесь у вас есть пример настройки:
С точки зрения сбоя узла и обновления узла я рекомендую вам проверить официальную документацию:
Вы также можете посмотреть на:
Вы можете зарезервировать статический IP, если хотите. Однако не могли бы вы подробно рассказать о своем варианте использования, потому что я не уверен, что ваш шаблон и дизайн являются лучшими.