А NodePort
выделяет IP-адрес, который является внутренним для кластера, поэтому необходимо перенаправлять порты.
Чтобы передать этот внутренний порт на внешний порт, вам нужно изменить спец.тип
к LoadBalancer
.
Я обнаружил, что термин «LoadBalancer» сбивает с толку, поскольку он противоречит термину, используемому такими сервисами, как AWS, для их собственных балансировщиков нагрузки (например, ELB в Amazon). В Кубернете LoadBalancer
service будет балансировать нагрузку между любыми модулями, которые соответствуют указанным вами критериям, или, в данном случае, только один.
Хитрость заключается в том, что если вы находитесь в среде с реальными балансировщиками нагрузки, тогда сервис автоматически сопоставляется с внешним балансировщиком нагрузки, чтобы вы могли получить доступ к сервису с реальным IP-адресом.
Это также можно сделать с помощью Вход
но это можно использовать только для служб http и https с входным контроллером, например NGINX. Поскольку MQTT — это другой протокол, служба используется для передачи соединения.
В моем случае я не работаю в облачной службе, поэтому балансировщик нагрузки, такой как ELB, не предоставляется по умолчанию — вам нужно добавить свой собственный (посмотрите, что я имею в виду, говоря о путанице). Я установил локальный балансировщик нагрузки MetalLB в кластере, и порт волшебным образом появился в одном из пулов локальных IP-адресов, которые я выделил.
Оттуда вам просто нужно настроить DNS (возможно, в вашем маршрутизаторе), чтобы имя, которое вы хотите, соответствовало выделенному IP. Мой брокер теперь отображается на mqtt.local
в порту 1883
Вот yaml, который работал у меня:
apiVersion: приложения/v1
вид: развертывание
метаданные:
имя: комар
пространство имен: комар
спецификация:
реплики: 1
селектор:
метки соответствия:
имя: комар
шаблон:
метаданные:
этикетки:
имя: комар
спецификация:
контейнеры:
- имя: комар
изображение: затмение-комар: 2.0.12
порты:
- контейнерПорт: 1883
томМаунты:
- имя: mosquitto-config
путь монтирования: /mosquitto/config/mosquitto.conf
подпуть: mosquitto.conf
тома:
- имя: mosquitto-config
карта конфигурации:
имя: комар-configmap
---
апиВерсия: v1
вид: карта конфигурации
метаданные:
имя: комар-configmap
пространство имен: комар
данные:
mosquitto.conf: |-
слушатель 1883
allow_anonymous правда
---
апиВерсия: v1
вид: сервис
метаданные:
название: москит-сервис
пространство имен: комар
аннотации: # <-- Какой пул IP использовать
metallb.universe.tf/пул адресов: lb-static-ips
спецификация:
тип: LoadBalancer # <-- Изменено
селектор:
имя: комар
порты:
- имя: комар
протокол: TCP
порт: 1883
целевой порт: 1883
# nodePort: 30007 <--- LoadBalancer разберется с этим
...а это YAML для metalLB:
апиВерсия: v1
вид: карта конфигурации
метаданные:
пространство имен: metallb-система
имя: конфиг
данные:
конфиг: |
пулы адресов:
- name: http # один IP-адрес для виртуальных http-хостов
протокол: уровень 2
адреса:
- 10.3.3.152/32
- name: lb-static-ips # IP адреса для сервисов
протокол: уровень 2
адреса:
- 10.3.3.153-10.3.3.160