Indirizzo IP statico per il traffico in uscita dal gruppo di scalabilità automatica AWS


27

Avrò un numero di istanze EC2 in un gruppo di scalabilità automatica Elastic Beanstalk in una sottorete predefinita in un VPC. L'app su queste istanze EC2 deve connettersi a un servizio di terze parti che utilizza una whitelist di indirizzi IP per consentire l'accesso. Quindi ho bisogno di uno o più indirizzi IP statici che posso fornire a questo fornitore di servizi in modo che possano essere aggiunti alla whitelist. La mia comprensione è che l'unico modo per ottenere un IP statico è ottenere un indirizzo IP elastico. E posso solo associare l'IP elastico a una sola istanza EC2 alla volta - non riesco ad associarlo a tutta la mia sottorete o gateway Internet (è corretto?). Quindi ho bisogno di un IP elastico per ogni istanza EC2, quindi ogni istanza può essere autorizzata separatamente? Come funzionerebbe se la scalabilità automatica aggiunge un'altra istanza? Dovrei avere un'istanza EC2 con un IP elastico, e instradare tutto il traffico in uscita tramite quell'istanza? In tal caso, quell'istanza deve essere esclusivamente per questo scopo o può essere una delle istanze che eseguono la mia app?

Risposte:


19

Hai bisogno di un NAT. Questa configurazione è comunemente utilizzato per supportare sottoreti private a VPC, c'è un bel guida dettagliata qui . Una volta configurato il VPC per utilizzare l'istanza NAT, tutto il traffico in uscita verrà attribuito all'IPE dell'istanza NAT.

In tal caso, quell'istanza deve essere esclusivamente per questo scopo o può essere una delle istanze che eseguono la mia app?

Tecnicamente probabilmente potresti, ma non è una buona idea:

  • È buona sicurezza avere ruoli isolati.
  • Si desidera che i server delle applicazioni abbiano profili di carico simili o identici. Se un'istanza ha un carico aggiuntivo del 10% a causa del NAT, dovrai ridimensionare prematuramente quando raggiungi i limiti di tale istanza. Questo peggiorerà quando il NAT diventa più occupato man mano che vengono aggiunte più istanze al cluster.
  • Vuoi che i tuoi server delle applicazioni siano identici ed effimeri in modo da poterli abbattere e / o sostituirli ogni volta che c'è un problema o devi ridimensionare. Avere un server delle applicazioni diverso dal resto sarebbe un grosso mal di testa.

Si potrebbe essere in grado di farla franca, se le istanze sono containerizzate ma non è ancora probabilmente una grande idea.

Tieni inoltre presente che la tua istanza NAT potrebbe essere un singolo punto di errore, quindi potresti voler pensare alla ridondanza.


L'utilizzo di NAT aumenterà il tempo di risposta di una richiesta in quanto aggiunge un'interfaccia aggiuntiva tra client e server?
r.bhardwaj,

1
Ho usato il gateway NAT per raggiungere lo scopo ( docs.aws.amazon.com/elasticbeanstalk/latest/dg/vpc-rds.html ) ma ancora quando eseguo nslookup sul mio server restituisce un indirizzo IP pubblico diverso da NAT gateway
r.bhardwaj

12

Capisco che questo è un vecchio thread - per qualcuno che ha un caso d'uso simile ora, nat-gateway AWS sarebbe una soluzione migliore.


4

Non ho abbastanza reputazione per commentare le risposte sopra, ma volevo aggiungere alcune informazioni che dovresti sapere se usi un gateway NAT per raggiungere questo obiettivo. Quando si crea un gateway NAT, si seleziona una sottorete e un indirizzo IP elastico.

Inizialmente, ho appena aggiunto il gateway NAT alla stessa sottorete su cui si trovavano il mio bilanciamento del carico elastico e le istanze EC2. Quindi, è necessario aggiungere il gateway NAT alla tabella del percorso. Ho aggiunto il gateway NAT come destinazione per l'IP del mio server di database esterno che stavo cercando di contattare. Ciò ha comportato il timeout delle applicazioni ospitate nel mio beanstalk elastico. Questo perché stavano provando a connettersi a quel database esterno attraverso il NAT. Raggiunsero il NAT, quindi il NAT cercò di raggiungere il mio server su Internet, e lo cercò nella tabella di instradamento per la sottorete su cui si trovava, che puntava su se stesso, creando un loop.

La soluzione è, prima di creare il gateway NAT, creare una nuova sottorete solo per il NAT in modo che il NAT abbia la propria sottorete e tabella di instradamento. Nella tabella di instradamento del NAT, indirizza tutto il traffico verso il gateway Internet. Nella tabella del percorso principale, punta il tuo IP esterno sul NAT. Quindi, quando le tue istanze EC2 tentano di connettersi al tuo IP esterno, le cercheranno nella tabella di route principale (o in qualsiasi tabella di route definita per le subnet in cui si trovano le tue istanze) e troveranno il NAT. Quindi, il tuo NAT cercherà quell'IP nella sua tabella di route e troverà Internet.


Mi piacerebbe vedere alcune schermate forse. Penso che questo sia il mio problema, ma posso solo risolverlo al 50% circa
justin.m.chase

Penso di averlo configurato in questo modo, ma quando provo ad accedere all'IP pubblico della mia istanza, scade il timeout. L'istanza avrebbe bisogno di due dispositivi di rete per poter attraversare il NAT e ricevere anche le connessioni in entrata da un IP pubblico?
justin.m.chase il

È necessario aggiungere una seconda interfaccia di rete a un'istanza e alla sottorete esterna, quindi assegnare un IP elastico a tale interfaccia di rete. È quindi possibile connettersi ad esso tramite quell'IP, ma tutto il traffico passerà attraverso la rete per impostazione predefinita.
justin.m.chase il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.