Не удается подключиться к Google MySQL из развернутого приложения Kubernetes NodeJS - PullRequest
0 голосов
/ 30 октября 2018

Последние пару дней я пытался заставить мое развернутое приложение NodeJS Kubernetes LoadBalancer подключиться к экземпляру Google Cloud MySQL. база данных SQL и развертывание Kubernetes существуют в одном проекте Google. Оба варианта ORM для этого проекта Sequelize. Вот фрагмент конфигурации моего соединения:

"deployConfigs": {
   "username": DB_USERNAME,
   "password": DB_PASSWORD,
   "database": DB_DATABASE,
   "host": DB_HOST,
   "port": 3306,
   "dialect": "mysql",
   "socketPath": "/cloudsql/INSTANCE_NAME"
}

Когда я запускаю приложение локально с теми же конфигурациями, я могу делать запросы из базы данных. Я также могу нажать URL-адрес NodeJS LoadBalancer, чтобы получить действительный ответ API, если API не попадает в базу данных.

Я внес в белый список мой IP-адрес, а также IP-адрес для NodeJS LoadBalancer API, но я все еще получаю следующий ответ:

{
"name": "SequelizeConnectionError",
"parent": {
    "errorno": "ETIMEDOUT",
    "code": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true
  },
"original": {
    "errorno": "ETIMEDOUT",
    "code": "ETIMEDOUT",
    "syscall": "connect",
    "fatal": true
  }
}

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

Опять же, я смог успешно поразить удаленную БД при локальном запуске контейнера и локальном запуске приложения узла. Я действительно не уверен, почему это не будет подключаться при развертывании.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Похоже, вы пытаетесь подключиться к своему экземпляру Cloud SQL через его публичный IP-адрес? Если это так, то будьте осторожны, так как это не поддерживается. Взгляните на эту страницу документации , чтобы выяснить, как лучше всего это сделать.

Вы упомянули, что вы уже используете прокси, но не упомянули какой. Если это Cloud SQL Proxy, то он должен позволять вам выполнять любые операции с базой данных, которые вы хотите, и все, что он делает - это устанавливать соединение между клиентом (то есть модулем) и экземпляром Cloud SQL. Этот прокси должен работать без проблем.

Не забудьте настроить соответствующие гранты и все такое на стороне SQL Cloud.

0 голосов
/ 30 октября 2018

Итак, Kubernetes много использует NAT для работы с источниками, поэтому мне пришлось добавить подобное правило в мою сеть, чтобы разрешить исходящий трафик из моего кластера в GCE:

egress rule

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

$ kubectl exec -it <running-pod> sh
/home/user # telnet $DB_HOST 3306
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...