Невозможно соединиться с экземпляром RDS извне VPC (ОШИБКА 2003 (HY000) Невозможно соединиться с MySQL Server)
Я создал VPC, а внутри него экземпляр RDS. Экземпляр RDS общедоступен и имеет следующие настройки:
Группа безопасности, прикрепленная к экземпляру RDS, принимает весь трафик:
Все списки ACL моей сети принимают все трафик. Однако я не могу получить доступ к своему экземпляру с компьютера за пределами моего VPC. Я получаю следующую ошибку:
root@vps151014:~# mysql -h mysql1.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com -P 3306 -u skullberry -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on 'mysql1.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com' (110)
Если я выполняю ту же команду из EC2 внутри моего VPC, я могу подключиться. Я пытался подключиться с нескольких машин, все без брандмауэра (т.е. открыт порт 3306).
Я явно что-то упускаю, но все, кажется, настроено правильно. В чем может быть проблема?
3 ответа
Чтобы экземпляр RDS в VPC был "общедоступным" (Интернет) доступным, все подсети, к которым он подключен, должны быть "общедоступными", а не "частными" подсетями VPC.
Публичная подсеть по существу определяется как подсеть, которая имеет объект интернет-шлюза (igw-xxxxxxxx) в качестве своего маршрута к "Интернету" или, по крайней мере, к любым интернет-адресам, к которым вам нужно получить доступ. Как правило, это адрес назначения 0.0.0.0/0
, Общедоступные подсети должны использоваться для экземпляров (включая RDS), которые будут иметь связанный общедоступный IP-адрес, и не должны использоваться для экземпляров, которые не будут иметь общедоступных IP-адресов, поскольку частные адреса не работают через Интернет без перевода.
В отличие от этого, в частной подсети таблица маршрутизации сконфигурирована так, чтобы достигать мест назначения в Интернете через другой экземпляр EC2, обычно экземпляр NAT. Это показано в таблице маршрутизации VPC, связанной с этой подсетью как i-xxxxxxxx, а не "igw". Эта машина (которая сама по себе будет находиться в другой подсети, нежели та, для которой она выступает в качестве пункта назначения маршрута), служит транслятором, позволяя экземплярам только для частного IP прозрачно отправлять исходящие интернет-запросы с использованием общедоступной машины NAT. IP для своих интернет-потребностей. Экземпляры с публичным IP-адресом не могут правильно взаимодействовать с Интернетом, если они подключены к частной подсети.
В данном конкретном случае подсети, связанные с экземпляром RDS, на самом деле не были настроены как нечто, что можно было бы просто классифицировать как частную или общедоступную подсеть, поскольку у подсети вообще не было маршрута по умолчанию. Добавление маршрута по умолчанию через объект "igw" или, как это сделал OP, добавление статического маршрута к IP-адресу в Интернете, где было необходимо подключение, в таблицу маршрутов VPC для подсетей устраняет проблему подключения.
Однако... Если у вас возникла похожая проблема, вы не можете просто изменить таблицу маршрутов или построить новые таблицы маршрутов и связать с ними подсети, если у вас больше ничего не работает правильно в подсетях, потому что изменение может быть разумным Ожидается, что сломать существующие подключения. В этом случае правильный путь - обеспечить экземпляры в разных подсетях правильными записями таблицы маршрутов.
При настройке VPC идеальным является четкое определение ролей подсети и полное предоставление необходимых маршрутов при первом запуске VPC. Также важно помнить, что вся VPC "LAN" является программно-определяемой сетью. В отличие от физической сети, где маршрутизатор может стать узким местом, и зачастую целесообразно размещать машины с большим трафиком среди них в одной подсети... подсети, пересекающие трафик, не имеют никаких недостатков производительности на VPC. Машины должны быть размещены в подсетях, которые соответствуют требованиям IP-адресации машины - публичный адрес, публичная подсеть; нет публичного адреса, частная подсеть.
Дополнительную информацию о логистике частных / общедоступных подсетей в VPC можно найти в разделе " Зачем нам нужна частная подсеть в VPC" (в разделе "Переполнение стека").
Это уже дает хороший ответ, но AWS создает общедоступную подсеть для вас, когда вы выбираете "общедоступный" вариант. Скорее для меня проблемой была группа безопасности VPC по умолчанию. Я смотрел на правила ACL сети, а не на группу безопасности. (Выбор "общедоступной" опции в RDS добавляет группу безопасности, но не добавляет автоматически входящие правила.)
Нажмите RDS и определите и нажмите на группу безопасности. Затем в разделе "Правила для входящих подключений" добавьте порт 3306 и добавьте свой IPV4-адрес подключения, xxxx/32 (или 0.0.0.0/32 - если вы хотите подключить весь Интернет, но будьте осторожны с этим).
Также убедитесь, что сеть, к которой вы подключены, не блокирует подключения к другому серверу через порт 3306. Это было так для меня при подключении к моей корпоративной сети.