Как представить развертывания Kubernetes в качестве сервисов, используя статический внешний IPv4-адрес рабочих узлов? - PullRequest
1 голос
/ 20 июня 2019

Я настроил кластер Kubernetes на пользовательской платформе OpenStack, к которой у меня нет прав администратора. Можно только создавать экземпляры и назначать им правила межсетевого экрана. Каждый новый экземпляр будет автоматически предоставлен статическим внешним IPv4-адресом, который может быть достигнут глобально. Это означает, что я даже не могу создать OpenStack Routers для своей внутренней сети.

Пока все хорошо, я настроил кластер Kubernetes, используя kubeadm, CoreDNS и flanel как CNI. Настройка оборудования кластера выглядит следующим образом:

  • Kubernetes-клиент и сервер-версия: 1.14.3 linux / amd64
  • Все серверы работают на Fedora Cloud Base 28
  • 1 Мастер Кубернетес
  • 5 рабочих узлов
  • 6 статических внешних IPv4-адресов (по одному на каждый из узлов)

После установки я развернул необходимые службы с помощью deployment -файлов. Все работает как надо.

Теперь у меня вопрос, как я могу сделать сервисы внешне доступными? Поскольку у меня нет LoadBalancer, предоставленного OpenStack? Как лучше всего к этому подойти?

Я задаю этот вопрос после предполагаемого количества четырех часов поиска в Google (возможно, я просто плох в этом). Я попробовал предложенные подходы из Документации , но мне совершенно неясно, какова концепция и правильный подход к задаче.

Например, я попытался назначить внешние IP-адреса для Сервиса, используя, например,

kubectl expose deployment $DEPLOYMENT_NAME \
                          --name=$SERVICE_NAME \
                          --port=$HOST_PORT \
                          --target-port=$TARGET_PORT \
                          --type=NodePort

или это

kubectl patch service $SERVICE_NAME -p '{"spec":{"externalIPs":["<worker_host_ip>"]}}'

Даже если внешний IP-адрес теперь назначен, маршрутизация к моей службе назначения все еще не маршрутизируется должным образом, потому что, как я понял, Kubernetes автоматически назначает хосты и случайные порты стручкам (что является желаемым поведением), но с учетом этого при каждом повторном развертывании может произойти сбой назначенного IP-адреса для сопоставления службы.

После вашей помощи и большого «Спасибо!» заранее я ожидаю, что я могу назначить порты приложений контейнеров статическому IPv4 одного из хостов и что Kubernetes автоматически узнает, что развернутая служба будет маршрутизироваться через этот конкретный IP, даже если модули работают на другой работник.

1 Ответ

1 голос
/ 15 июля 2019

После некоторого времени исследования я наткнулся на реализацию MetalLB решения по балансировке нагрузки из чистого металла для Kubernetes. Это помогло мне решить проблему, описанную выше. Однако, с моей точки зрения, MetalLB следует использовать только как последний шанс, поскольку он не готов к работе и требует чрезмерной настройки с использованием решения NGINX Ingress Controller для правильного сопоставления распределения IPv4 кластера.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...