Публикация этого вики-ответа сообщества, чтобы установить более базовый подход к этому вопросу, а не дать окончательное решение.
Не стесняйтесь редактировать и расширять.
Вы можете открыть свои приложения с помощью Услуги
. Есть несколько вариантов, каждый из которых чем-то отличается от другого:
IP кластера
: Предоставляет Службу на внутреннем IP-адресе кластера. Выбор этого значения делает службу доступной только внутри кластера. Это значение по умолчанию Тип Обслуживания
.
- NodePort: Предоставляет услугу на IP-адресе каждого узла на статическом порту (
NodePort
). А IP кластера
Служба, к которой NodePort
Сервисные маршруты создаются автоматически. Вы сможете связаться с NodePort
Сервис из-за пределов кластера, запросив <NodeIP>:<NodePort>
.
- LoadBalancer: предоставляет доступ к Службе извне с помощью балансировщика нагрузки облачного провайдера.
NodePort
и IP кластера
Сервисы, к которым маршрутизирует внешний балансировщик нагрузки, создаются автоматически.
- ВнешнееИмя: сопоставляет сервис с содержимым
externalName
поле (напр. foo.bar.example.com
), возвращая CNAME
запись с его значением. Никакого проксирования не настроено.
-- Kubernetes.io: Документы: Концепции: Сеть сервисов: Сервис: Типы услуг издательских услуг
Документация по предоставлению приложений на Гугл Кубернетес Движок
можно найти здесь:
Сосредоточившись конкретно на некоторых пунктах, включенных в вопрос:
Я могу использовать службу NodePort и потерять контроль над тем, к какому порту должен подключаться клиент. Это проблема, потому что сервер регистрируется в списке серверов.
Вы можете указать NodePort
порт в Оказание услуг
YAML (как порт узла: 32137
или же порт узла: 30911
).
Вы можете настроить свое приложение для прослушивания того же порта, что и узелПорт
:
- Приложение прослушивает порт
30000
- Сервис использует
узелПорт
с порт
:30000
(клиент/пользователь должен подключиться к этому порту) и targetPort:30000
. В этом случае изменений порта не будет.
Дополнительное замечание!
По умолчанию узелПорт
диапазон портов заблокирован опорная точка
Брандмауэр. Вам нужно будет создать правило (или набор правил), которое позволит это сделать.
Я могу использовать сеть хоста. Если моя информация верна, для этого требуются привилегированные контейнеры, что определенно не очень хорошо.
Я бы посоветовал не использовать привилегированные контейнеры, если за этим не стоит веская причина. Ссылаясь на официальную документацию:
Политика Privileged намеренно открыта и не ограничена. Этот тип политики обычно предназначен для рабочих нагрузок на уровне системы и инфраструктуры, управляемых привилегированными доверенными пользователями.
-- Kubernetes.io: Документы: Основные понятия: Безопасность: Стандарт безопасности модуля: Привилегированный
Порт можно настроить, если я знаю, на каком порту должен работать сервер до запуска модуля.
Поскольку у вас будет множество одиночных стручки
(каждый с отдельным Развертывание
) вы можете параметризовать каждый из них. Я имею в виду, что вы можете создать шаблон и изменять только части ваших манифестов (например, порты, переменные env и т. д.).
Вы можете передать переменную окружения в свой Стручок
чтобы его можно было использовать в качестве параметра в ваших командах. Вы также можете изменить команду, которую Стручок
начинается с