Время ожидания выбора сервера истекло после 30000 мс {"name": "MongooseTimeoutError", "reason": {"name": "MongoNetworkError"}} - PullRequest
3 голосов
/ 19 января 2020

Контекст

Я использую GCP , более конкретно GKE , чтобы развернуть мое приложение в контейнере / контейнере. Приложение, которое я пытаюсь развернуть, находится в node js (express js). Это приложение подключается к MongoDB Atlas (бесплатный уровень M0) .

Нет проблем при локальном запуске проекта. Он подключается к базе данных, и я могу добавлять / удалять документы без проблем.

Я позволил своему атласному кластеру MongoDB получить доступ любому (0.0.0.0/0), чтобы упростить отладку.

Когда я развертываю свой проект с моим CI / CD Deploy в GKE, все идет гладко.

Проблема

Все становится сложнее, когда я развернул мой проект. Я получаю CrashLoopBackOff . После проверки журналов происходит сбой, вот что я нашел:

error: Server selection timed out after 30000 ms {"name":"MongooseTimeoutError","reason":{"name":"MongoNetworkError"}}

Leads

Я считаю, что проблема в том, что мой модуль не может подключиться к MongoDB Atlas через его обычный порт 27017, отправив мне сообщение об ошибке тайм-аута.

Вот что я пробовал:

  • Добавление в мой VP C сети в GCP нового правила брандмауэра : gcloud compute firewall-rules create allow-mongodb --allow tcp:27017

  • Добавление в мой deploy.yml следующего ключа / значения: dnsPolicy: Default

Заключение

Потратив часы на решение этой проблемы, я все еще не нашел никаких решений, и у меня заканчиваются идеи , К вашему сведению, я новичок в GCP и в Kubernetes, поэтому я мог бы пропустить что-то большое здесь, но не уверен, что.

Если какой-нибудь добрый человек попадет на этот пост и узнает ответ, я был бы рад, если он / она могла бы помочь мне здесь.

Хорошего вам.

Приветствия,

1 Ответ

2 голосов
/ 19 января 2020

Если вы считаете, что сетевая политика была правильно настроена с помощью правил брандмауэра GCP, давайте шаг за шагом разберемся с ней в kubernetes.

  1. проверьте, можете ли вы подключиться к mongodb Atlas из самих контейнеров.
kubectl exec <node_app_pod> --command -- curl <mongo_url>:27017
проверь сетевую политику в кубернетес. Чтобы упростить его, разрешите все выходы
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all
spec:
  podSelector: {}
  egress:
  - {}
  policyTypes:
  - Egress

Если вы хотите установить только порт 27017, вы можете отрегулировать с помощью этого документа:

https://kubernetes.io/docs/concepts/services-networking/network-policies/

Дайте мне знать, если сейчас лучше.

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