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

27

Vou ter várias instâncias do EC2 em um grupo de dimensionamento automático do Elastic Beanstalk em uma sub-rede padrão em uma VPC. O aplicativo nessas instâncias do EC2 precisa se conectar a um serviço de terceiros que usa uma lista de permissões de endereços 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 possam ser adicionados à lista de permissões. Meu entendimento é que a única maneira de obter um IP estático é obter um endereço IP Elastic. E só posso associar o Elastic IP a uma instância do EC2 por vez - não consigo associá-lo a toda a minha sub-rede ou gateway da Internet (isso está correto?). Então, preciso de um IP Elastic para cada instância do EC2, para que cada instância possa ser incluída na lista de permissões separadamente? Como isso funcionaria se o dimensionamento automático adicionasse outra instância? Devo ter uma instância do EC2 com um IP Elastic, e rotear todo o tráfego de saída através dessa instância? Em caso afirmativo, essa instância precisa ser apenas para esse fim ou pode ser uma das instâncias que estão executando meu aplicativo?

davidwebster48
fonte

Respostas:

19

Você precisa de um NAT. Essa configuração é comumente usada para oferecer suporte a sub-redes privadas na VPC, há um guia bastante detalhado aqui . Depois que sua VPC estiver configurada para usar a instância NAT, todo o tráfego de saída será atribuído ao EIP da instância NAT.

Em caso afirmativo, essa instância precisa ser apenas para esse fim ou pode ser uma das instâncias que estão executando meu aplicativo?

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, será necessário aumentar a escala prematuramente quando atingir os limites dessa instância. Isso piorará à medida que o NAT ficar mais ocupado, à medida que mais instâncias forem adicionadas ao seu cluster.
  • Você deseja que seus servidores de aplicativos sejam idênticos e efêmeros para poder 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ê poderá se safar se suas instâncias estiverem em contêiner, mas provavelmente ainda não é uma ótima idéia.

Lembre-se também de que sua instância NAT pode ser um ponto único de falha; portanto, você pode pensar em redundância.

thexacre
fonte
O uso do NAT aumentará o tempo de resposta de uma solicitação, pois ela adiciona uma interface adicional em relação ao cliente e servidor?
r.bhardwaj
1
Eu usei o gateway NAT para atingir esse objetivo ( docs.aws.amazon.com/elasticbeanstalk/latest/dg/vpc-rds.html ), mas ainda quando faço o nslookup no meu servidor, ele está retornando um endereço IP público diferente do NAT gateway
r.bhardwaj
12

Entendo que esse é um encadeamento antigo - para alguém que tenha um caso de uso semelhante agora, o AWS nat-gateway seria uma solução melhor.

senhor dos pacotes
fonte
4

Não tenho reputação suficiente para comentar as respostas acima, mas queria adicionar algumas informações que você precisará saber se estiver usando um gateway NAT para conseguir isso. Ao criar um gateway NAT, você seleciona uma sub-rede e um endereço IP elástico.

Inicialmente, acabei de adicionar o gateway NAT à mesma sub-rede em que meu balanceador de carga elástico e instâncias EC2 estavam. Em seguida, você deve adicionar o gateway NAT à sua tabela de rotas. Adicionei o gateway NAT como destino do IP do meu servidor de banco de dados externo com o qual estava tentando entrar em contato. Isso resultou no tempo limite dos aplicativos hospedados no meu pé de feijão elástico. Isso ocorre porque eles estavam tentando se conectar a esse banco de dados externo por meio do NAT. Eles alcançaram o NAT e, em seguida, o NAT tentou acessar meu servidor pela Internet e procurou na tabela de rotas a sub-rede em que estava, o que estava voltando a si próprio, criando um loop.

A solução é, antes de criar seu gateway NAT, criar uma nova sub-rede apenas para o NAT, para 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 as procurarão na tabela de rotas principal (ou em qualquer tabela de rotas que você definiu para as sub-redes em que suas instâncias estão) e localizam o NAT. Então, seu NAT procurará esse IP em sua própria tabela de rotas e encontrará a Internet.

user339568
fonte
Eu adoraria ver algumas capturas de tela, talvez. Eu acho que esse é o meu problema, mas só posso grocá-lo em cerca de 50%
justin.m
Acho que tenho a configuração assim, mas quando tento ssh no IP público da minha instância, o tempo limite é excedido. A instância precisaria de dois dispositivos de rede para poder passar pelo NAT e também receber conexões de entrada de um IP público?
usar o seguinte código
Você precisa adicionar uma segunda interface de rede a uma instância e à sub-rede externa e atribuir um ip elástico a essa interface de rede. Você pode conectar-se a ele através desse IP, mas todo o restante tráfego passará pelo nat por padrão ainda.
usar o seguinte código