Kubernetes - маршрутизировать статический IP для нескольких сервисов (Google Cloud Platform) - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть небольшое приложение, состоящее из трех служб:

  1. Одностраничное приложение (SPA), обслуживаемое из nginx
  2. Простой API-интерфейс nodejs HTTP, используемый SPA
  3. MQtt-брокер, предоставляющий порты 1883 и 9001

В идеале мне бы хотелось, чтобы все обслуживалось с одного и того же субдомена и статического IP-адреса, и я пытался настроить это в Kubernetes в Google CloudПлатформа.

Я создал развертывания для каждой из служб с портом 80, предоставляющим SPA, API 3000 и брокером MQTT 1883/9001.Затем я следовал инструкциям здесь для настройки статического IP-адреса и службы для маршрутизации в SPA, а затем создал аналогичные службы для API и приложения MQTT.(Я изначально адаптировал их из развертываний и служб, сгенерированных из файла docker-compose и Kompose).

Кажется, что SPA и API работают нормально, а служба MQTT - нет.Когда я запускаю kubetl get events, я вижу:

Error creating load balancer (will retry): failed to ensure load balancer for service default/mqtt-broker: failed to create forwarding rule for load balancer (a5529f2a9bdaf11e8b35d42010a84005(default/mqtt-broker)): googleapi: Error 400: Invalid value for field 'resource.IPAddress': '35.190.221.113'. Specified IP address is in-use and would result in a conflict., invalid

Поэтому мне интересно, должен ли я создать одну службу для маршрутизации к трем развертываниям, но не могу найти какую-либо документациюили примеры, объясняющие, как это сделать для службы, отличной от http.

Полагаю, я мог бы разместить службу mqtt на отдельном IP-адресе, но, похоже, это решает проблему, а не решает ее.

Заранее спасибо за любой совет.

1 Ответ

0 голосов
/ 29 сентября 2018

В конце концов, я обнаружил, что в этом github-хранилище я нашел почти идентичный сценарий использования . .

По сути, они создают брокера MQTT на отдельной статической платформе.IP и использование вызовов API Kubernetes для раскрытия деталей переднему краю, которые они объясняют в следующем комментарии в верхней части файла web.yaml:

Это требует некоторой хитрости, поскольку это необходимовыставить IP-адрес LB для сервера MQTT.Для этого нужны API-вызовы kubernetes, чтобы найти его, и возможность хранить его где-то (мы храним это в секрете).Для обеспечения безопасности это делается с помощью специальной учетной записи службы и контейнера инициализации.

https://github.com/IBM/ny-power

...