Публикация этого вики-ответа сообщества, чтобы установить более базовый подход к этому вопросу, а не дать окончательное решение.
Не стесняйтесь редактировать и расширять.
Вы можете открыть свои приложения с помощью Услуги. Есть несколько вариантов, каждый из которых чем-то отличается от другого:
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 и т. д.).
Вы можете передать переменную окружения в свой Стручок чтобы его можно было использовать в качестве параметра в ваших командах. Вы также можете изменить команду, которую Стручок начинается с