Почему я получаю сообщение об ошибке «len len 1347703880: недопустимо. Мин. 16 макс.: 48000000» при попытке подключиться к модулю OKD, на котором запущен простой контейнер Монго? - PullRequest
1 голос
/ 15 мая 2019

Я создал контейнер Mongo, используя только базовый образ mongo: 3.6.4, официальный образ докера и развернул его в моем кластере OpenShift OKD, но не могу подключиться к этому экземпляру MongoDB с помощью клиента Mongo извне кластера.

Я могу получить доступ к модулю в http://mongodb.my.domain и успешно получить сообщение «Похоже, вы пытаетесь получить доступ к MongoDB через HTTP через собственный порт драйвера». сообщение.

При использовании терминала в модуле я могу успешно войти в систему, используя: mongo "mongodb: // mongoadmin: pass @ localhost" --authenticationDatabase admin

Но при попытке подключения извне OKD соединение не удается.

Мой клиент должен пройти через прокси, прежде чем сможет получить доступ к модулям OKD, и у меня есть файл сертификата .der, но я не уверен, связано ли это с проблемой.

Некоторые команды, которые я пробовал:

mongo "mongodb: // mongoadmin: pass@mongodb.my.domain: 80" --authenticationDatabase admin

mongo --ssl "mongodb: // mongoadmin: pass@mongodb.my.domain: 80" --authenticationDatabase admin

Я ожидал, что смогу успешно подключиться, но вместо этого получил это сообщение об ошибке:

MongoDB shell version v3.4.20
connecting to: mongodb://mongoadmin:pass@mongodb.my.domain:80
2019-05-15T11:32:25.514+0100 I NETWORK  [thread1] recv(): message len 1347703880 is invalid. Min 16 Max: 48000000
2019-05-15T11:32:25.514+0100 E QUERY    [thread1] Error: network error while attempting to run command 'isMaster' on host 'mongodb.my.domain:80'  :
connect@src/mongo/shell/mongo.js:240:13
@(connect):1:6
exception: connect failed

Я не уверен, является ли это проблемой с использованием моего клиента MongoDB или, возможно, с некоторыми настройками прокси в моем кластере OKD. Любая помощь будет оценена.

1 Ответ

2 голосов
/ 15 мая 2019

Проблема в том, что внешние маршруты OpenShift не очень хороши для обработки соединений с базой данных. Когда вы пытаетесь соединиться с модулем Mongo через маршрут, маршрут примет подключение и передаст ваше подключение службе Mongo. Я считаю, что эта передача оборачивает соединение в HTTP-оболочку, с которой Монго не любит обрабатывать. Документация OKD подчеркивает, что маршрутный трафик должен быть основан на HTTP, что приведет к сбою соединения.

Вы можете увидеть доказательства этого, когда пытаетесь подключиться к базе данных MongoDB, и она возвращает «Похоже, вы пытаетесь получить доступ к MongoDB через HTTP через порт собственного драйвера». в браузер. Пользовательief.malone объясняет это и предложил пару решений / обходных путей в своем ответе на этот вопрос .

Чтобы добавить к ответурепрепортажу rel.malone, я бы предложил вам перенести порт с модуля MongoDB на локальный компьютер для разработки / отладки. В производственной среде вы можете развернуть в OKD приложение, которое ссылается на службу MongoDB через его внутреннее DNS-имя, которое будет выглядеть примерно так: mongodb.project_namespace.svc:27017. Таким образом, вы избежите маршрута, мешающего соединению.

Документация Openshift OKD по переадресации портов не настолько информативна , но, поскольку oc запускает команду kubectl под капотом, вы можете прочитать это руководство по Kubernetes чтобы получить больше информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...