Рейтинг:0

Доступ к Mosquitto MQTT из-за пределов моего кластера kubernetes

флаг us

У меня есть следующая установка Mosquitto на моем minikube:

Развертывание:

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
вид: сервис
метаданные:
  название: москит-сервис
спецификация:
  тип: NodePort
  селектор:
    имя: комар
  порты:
    - протокол: TCP
      порт: 1883
      целевой порт: 1883
      порт узла: 30007  

Теперь я хотел бы получить доступ к моему развертыванию из моей локальной сети. Тестирование с помощью MQTT-Explorer с моей хост-машины с Windows. Использование mqtt://localhost:30007 не работает. Известно, что установка работает с переадресацией портов.

$ k порт-вперед москит-66d69df7c9-zrvgt 1111:1883
Пересылка с 127.0.0.1:1111 -> 1883
Пересылка с [::1]:1111 -> 1883
Обработка соединения для 1111

Я думаю, что я неправильно понимаю сервисную часть. В конце концов, служба должна быть доступна из моей локальной сети либо с помощью:

Бонусный вопрос: как я могу перенаправить службу на что-то вроде mqtt.local? Kubernetes Ingress у меня тоже не работает, полагаю, потому что он используется только для HTTP.

Рейтинг:0
флаг pl

А 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

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.