Я настроил кластер 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, даже если модули работают на другой работник.