3 votes

Connectez-vous à RDS à partir d'une instance EC2 dans une zone de disponibilité (AZ) différente

D'accord, j'ai un VPC avec trois serveurs d'applications et une instance de Postgres dans RDS.

J'ai un groupe de sécurité appelé 'rds-staging' qui autorise les connexions entrantes sur le port 5432 depuis un groupe de sécurité appelé 'app-elb-staging'.

'app-elb-staging' est le groupe de sécurité appliqué à tous mes instances EC2, et il permet à tout le trafic sortant d'aller n'importe où.

L'instance RDS est dans l'AZ us-east-1e. Je peux m'y connecter depuis mon instance EC2 dans us-east-1e (10,0,3.*), mais pas depuis d'autres instances EC2 dans us-east-1a (10,0,1.*) ou us-east-1c (10,0,2.*):

deploy@ip-10-0-3-220:~$ nc -zv xxx.us-east-1.rds.amazonaws.com 5432
La connexion à xxx.us-east-1.rds.amazonaws.com sur le port 5432 (tcp/postgresql) a réussi!

deploy@ip-10-0-1-155:~$ nc -zv xxx.us-east-1.rds.amazonaws.com 5432
nc: échec de la connexion à xxx.us-east-1.rds.amazonaws.com sur le port 5432 (tcp) : Aucun chemin d'accès à l'hôte

deploy@ip-10-0-2-90:~$ nc -zv xxx.us-east-1.rds.amazonaws.com 5432
nc: échec de la connexion à xxx.us-east-1.rds.amazonaws.com sur le port 5432 (tcp) : Aucun chemin d'accès à l'hôte

Est-ce que quelqu'un a déjà vu cela auparavant? J'ai vérifié le DNS, et chaque machine résout le nom d'hôte en la même IP (10,0,3.x).

0 votes

"chaque machine résout le nom d'hôte vers la même IP" ... Est-ce une adresse IP en 10.x.x.x ? Ou une IP publique ?

0 votes

@Michael-sqlbot le nom d'hôte de la base de données se résout en une adresse IP 10.0.3.x

0 votes

@Michael-sqlbot l'instance de la base de données n'est pas publiquement accessible :)

2voto

Ryan Ahearn Points 3829

D'accord, j'ai finalement trouvé la cause racine de ce problème. L'AMI que j'utilisais créait un pont qui causait des problèmes de connexion en raison de collisions avec les adresses IP de mes sous-réseaux. La sortie de sudo route -n ressemblait à ceci sur une instance affectée :

ubuntu@ip-10-0-1-92:~$ sudo route -n
Table de routage IP du noyau
Destination     Passerelle      Masque_gen      Indic  Métric Ref    Usg Iface
0.0.0.0         10.0.1.1        0.0.0.0         UG    0      0        0 eth0
10.0.1.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 lxcbr0

Par conséquent, toute connexion à 10.0.2.* échouerait alors :

deploy@ip-10-0-1-92:~$ nc -zv 10.0.2.53 22
nc: connect to 10.0.2.53 port 22 (tcp) échec: Aucune route vers l'hôte

Le retrait du pont avec sudo ifconfig lxcbr0 down a résolu le problème, mais l'utilisation d'une AMI qui ne configure pas ce pont à l'origine a corrigé la cause racine.

1voto

sysadmin1138 Points 129885

J'ai vu ce genre de problème causé par l'une des deux raisons :

  1. Les tables de routage attachées aux différents sous-réseaux sont mal configurées.
  2. Un ACL réseau est en jeu (peu courant).

Vous n'avez pas besoin de définir des routes pour chaque sous-réseau, elles sont implicites dans la table. Vérifiez les adresses IP auxquelles votre entrée DNS se résout sur les instances d'autres zones de disponibilité pour vous assurer qu'elles sont dans le VPC.

Les ACL réseau peuvent entrer en jeu, mais vous devez les configurer. Par défaut, elles sont largement ouvertes. C'est pourquoi je l'ai étiqueté comme peu probable, mais cela peut causer des problèmes comme celui-ci. Cela dit, l'erreur "aucune route vers l'hôte" suggère que ce n'est pas votre problème.

0 votes

J'ai examiné mes tables de routage, mais elles semblent correctes de ce que je peux comprendre. Chaque sous-réseau est attaché à la même table de routage, qui comporte deux routes : 10.0.0.0/16 - local et 0.0.0.0/0 - routé vers l'instance NAT. Les ACL réseau semblent également correctes - largement ouvertes, comme vous le mentionnez.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X