Dirección IP estática para el tráfico saliente del grupo de escalado automático de AWS

27

Voy a tener varias instancias EC2 en un grupo de autoescalado Elastic Beanstalk en una subred predeterminada en una VPC. La aplicación en estas instancias de EC2 necesita conectarse a un servicio de terceros que utiliza una lista blanca de direcciones IP para permitir el acceso. Por lo tanto, necesito una o más direcciones IP estáticas que puedo dar a este proveedor de servicios para que puedan agregarse a la lista blanca. Tengo entendido que la única forma de obtener una IP estática es obtener una dirección IP elástica. Y solo puedo asociar Elastic IP con una instancia de EC2 a la vez; no puedo asociarla con toda mi subred o puerta de enlace de Internet (¿es esto correcto?). Entonces, ¿necesito una IP elástica para cada instancia de EC2, para que cada instancia se pueda incluir en la lista blanca por separado? ¿Cómo funcionaría eso si el escalado automático agrega otra instancia? ¿Debería tener una instancia EC2 con una IP elástica, y enrutar todo el tráfico saliente a través de esa instancia? Si es así, ¿esa instancia debe ser únicamente para este propósito o puede ser una de las instancias que ejecuta mi aplicación?

davidwebster48
fuente

Respuestas:

19

Necesitas un NAT. Esta configuración se utiliza comúnmente para apoyar subredes privadas en VPC, no es del todo una guía detallada aquí . Una vez que su VPC esté configurada para usar la instancia NAT, todo el tráfico saliente se atribuirá al EIP de la instancia NAT.

Si es así, ¿esa instancia debe ser únicamente para este propósito o puede ser una de las instancias que ejecuta mi aplicación?

Técnicamente probablemente podría, pero no es una buena idea:

  • Es una buena seguridad tener roles aislados.
  • Desea que sus servidores de aplicaciones tengan perfiles de carga similares o idénticos. Si una instancia tiene una carga adicional del 10% debido al NAT, entonces tendrá que escalar prematuramente cuando llegue a los límites de esa instancia. Esto empeorará a medida que el NAT se vuelva más ocupado a medida que se agreguen más instancias a su clúster.
  • Desea que sus servidores de aplicaciones sean idénticos y efímeros para poder desmontarlos y / o reemplazarlos cada vez que haya un problema o necesite escalar. Tener un servidor de aplicaciones que sea diferente al resto sería un gran dolor de cabeza.

Es posible que pueda salirse con la suya si sus instancias están en contenedores, pero probablemente aún no sea una gran idea.

También tenga en cuenta que su instancia de NAT podría ser un punto único de falla, por lo que es posible que desee pensar en la redundancia.

thexacre
fuente
¿Usar NAT aumentará el tiempo de respuesta de una solicitud al agregar una interfaz adicional en blanco y negro cliente y servidor?
r.bhardwaj
1
He usado la puerta de enlace NAT para lograr el propósito ( docs.aws.amazon.com/elasticbeanstalk/latest/dg/vpc-rds.html ) pero aún cuando hago el nslookup en mi servidor, me devuelve una dirección IP pública diferente de NAT gateway
r.bhardwaj
12

Entiendo que este es un hilo viejo: para alguien que tiene un caso de uso similar ahora, AWS nat-gateway sería una mejor solución.

señor del paquete
fuente
4

No tengo suficiente reputación para comentar las respuestas anteriores, pero quería agregar alguna información que necesitará saber si utiliza una puerta de enlace NAT para lograr esto. Cuando crea una puerta de enlace NAT, selecciona una subred y una dirección IP elástica.

Al principio, acabo de agregar la puerta de enlace NAT a la misma subred en la que estaban mi balanceador de carga elástica y las instancias EC2. Luego, debe agregar la puerta de enlace NAT a su tabla de rutas. Agregué la puerta de enlace NAT como destino para la IP de mi servidor de base de datos externo con el que estaba tratando de contactarme. Esto dio como resultado que las aplicaciones alojadas en mi beanstalk elástico se agotaran. Esto se debe a que intentaban conectarse a esa base de datos externa a través de NAT. Llegaron al NAT, y luego el NAT trató de comunicarse con mi servidor a través de Internet, y lo buscó en la tabla de rutas de la subred en la que estaba, que apuntaba hacia sí mismo, creando un bucle.

La solución es, antes de crear su puerta de enlace NAT, crear una nueva subred solo para NAT para que NAT tenga su propia subred y tabla de rutas. En la tabla de rutas de NAT, dirija todo el tráfico a la puerta de enlace de Internet. En su tabla de ruta principal, apunte su IP externa a la NAT. Luego, cuando sus instancias EC2 intenten conectarse a su IP externa, las buscarán en la tabla de rutas principal (o cualquier tabla de rutas que haya definido para las subredes en las que se encuentran sus instancias), y encontrarán la NAT. Luego, su NAT buscará esa IP en su propia tabla de rutas y buscará Internet.

user339568
fuente
Me encantaría ver algunas capturas de pantalla tal vez. Creo que este es mi problema, pero solo puedo asimilarlo en un 50%
justin
Creo que lo tengo configurado de esta manera, pero cuando intento ingresar a la IP pública de mi instancia, se agota el tiempo de espera. ¿La instancia necesitaría dos dispositivos de red para poder pasar a través de NAT y también recibir conexiones entrantes de una IP pública?
justin.m.compra el
Debe agregar una segunda interfaz de red a una instancia y a la subred externa, luego asignar una dirección IP elástica a esa interfaz de red. Luego puede conectarse a él a través de esa IP, pero todo el resto del tráfico pasará a través de la nat de forma predeterminada.
justin