Endereço IP estático para o tráfego de saída do grupo de escalonamento automático da AWS

21

Vou ter várias instâncias do EC2 em um grupo de escalonamento automático do Elastic Beanstalk em uma sub-rede padrão em um VPC. O aplicativo nessas instâncias do EC2 precisa se conectar a um serviço de terceiros que use uma lista de permissões de endereço IP para permitir o acesso. Portanto, preciso de um ou mais endereços IP estáticos que eu possa fornecer a esse provedor de serviços para que eles possam ser adicionados à lista de desbloqueio. Meu entendimento é que a única maneira de obter um IP estático é obter um endereço IP elástico. E só posso associar o Elastic IP a uma instância do EC2 por vez - não posso associá-lo a toda a minha sub-rede ou gateway da Internet (está correto?). Então, preciso de um IP elástico para cada instância do EC2, para que cada instância possa ser separada na lista de permissões? Como isso funcionaria se o escalonamento automático acrescentasse outra instância? Devo ter uma instância do EC2 com um Elastic IP e rotear todo o tráfego de saída através dessa instância? Em caso afirmativo, essa instância precisa ser apenas para essa finalidade ou pode ser uma das instâncias que estão executando meu aplicativo?

    
por davidwebster48 30.08.2014 / 13:39

3 respostas

16

Você precisa de um NAT. Esta configuração é comumente usada para suportar sub-redes privadas no VPC. Há um guia bastante detalhado aqui . Uma vez que seu VPC esteja configurado para usar a instância NAT, todo o tráfego de saída será atribuído ao EIP da instância NAT.

If so, does that instance need to be solely for this purpose or can it be one of the instances that's running my app?

Tecnicamente, você provavelmente poderia, mas não é uma boa ideia:

  • É uma boa segurança ter papéis isolados.
  • Você deseja que seus servidores de aplicativos tenham perfis de carga semelhantes ou idênticos. Se uma instância tiver uma carga extra de 10% por causa do NAT, você terá que aumentar o tamanho prematuramente quando atingir os limites dessa instância. Isso vai piorar à medida que o NAT fica mais ocupado à medida que mais instâncias são adicionadas ao seu cluster.
  • Você deseja que seus servidores de aplicativos sejam idênticos e efêmeros, para que você possa derrubá-los e / ou substituí-los sempre que houver um problema ou precisar escalar. Ter um servidor de aplicativos diferente dos demais seria uma grande dor de cabeça.

Você pode saber se suas instâncias são conteinerizadas, mas provavelmente ainda não é uma ótima ideia.

Lembre-se também de que sua instância do NAT pode ser um ponto único de falha, então você pode querer pensar em redundância.

    
por 31.08.2014 / 03:47
8

Eu entendo que este é um segmento antigo - para alguém que tenha um caso de uso semelhante agora, AWS nat-gateway seria uma solução melhor.

    
por 05.04.2017 / 09:56
3

Eu não tenho reputação suficiente para comentar sobre as respostas acima, mas eu queria adicionar algumas informações que você precisa saber se estiver usando um gateway NAT para conseguir isso. Quando você cria um gateway NAT, seleciona uma sub-rede e um endereço IP elástico.

Primeiro, acabei de adicionar o gateway NAT à mesma sub-rede em que o meu balanceador de carga elástico e as instâncias do EC2 estavam. Em seguida, você precisa adicionar o gateway NAT à sua tabela de rotas. Eu adicionei o gateway NAT como o destino para o IP do meu servidor de banco de dados externo que eu estava tentando contatar. Isso resultou nos aplicativos hospedados no tempo limite do meu beanstalk elástico. Isso ocorre porque eles estavam tentando se conectar a esse banco de dados externo através do NAT. Eles alcançaram o NAT, e depois o NAT tentou acessar meu servidor pela Internet e pesquisou na tabela de roteamento a sub-rede em que estava, apontando para si mesmo, criando um loop.

A solução é, antes de criar seu gateway NAT, criar uma nova sub-rede apenas para o NAT, de modo que o NAT tenha sua própria sub-rede e tabela de rotas. Na tabela de rotas do NAT, aponte todo o tráfego para o gateway da Internet. Na sua tabela de rotas principal, aponte seu IP externo para o NAT. Então, quando suas instâncias do EC2 tentarem se conectar ao seu IP externo, elas procurarão na tabela de rotas principal (ou na tabela de roteamento que você definiu para as sub-redes em que suas instâncias estão) e localizarão o NAT. Em seguida, seu NAT procurará o IP na sua própria tabela de rotas e localizará a Internet.

    
por 26.02.2018 / 05:38