IP público estável ou faixa de IP para conexões de saída no GKE

20

Eu uso o Google Kubernetes Engine para executar pods sob demanda. Cada pod é exposto publicamente à Internet usando um serviço de porta de nó.

Estou procurando uma maneira no GKE de obter um único IP ou um intervalo de IP para conexões de saída, para fornecê-las a APIs de terceiros para incluí-las na lista de permissões.

Os IPs do nó GKE não são gerenciáveis ​​quando os nós dimensionam automaticamente ou quando eu os atualizo. Preciso de uma maneira de manter um IP de saída consistente.

Tentei usar um gateway NAT simples para os nós do Kubernetes (usando o exemplo aqui ) e, embora ele roteie as conexões de saída para o gateway NAT, ele interrompe o tráfego de entrada para os pods (serviço Nodeport) desde que eles caem no Gateway NAT.

  • Existe um intervalo de IP padrão para uma região da nuvem do Google que eu posso fornecer a terceiros para colocar na lista de permissões (ou)

  • Se o GKE fornecer uma maneira de selecionar IPs externos de nós em uma lista pré-reservada de IPs estáticos (ou)

  • Existe alguma outra maneira de obter um único IP estático ou um intervalo de IP que represente o tráfego de saída dos pods

Encontrei perguntas semelhantes como essa , mas elas não tratam do meu problema, pois os pods devem ser conectáveis ​​externamente, o que é interrompido ao usar um NAT.

Parag
fonte

Respostas:

6

O Google Cloud agora oferece um serviço gerenciado de Gateway NAT - Cloud NAT .

Esse gateway pode ser usado com um cluster GKE, que fornece um IP de saída pública estável a todos os pods dentro dele, o que permite que eles sejam incluídos na lista de permissões por provedores de serviços terceirizados.

A implementação de exemplo para usar o Cloud NAT com GKE é fornecida aqui - https://cloud.google.com/nat/docs/gke-example

Parag
fonte
O cluster precisa ser privado?
Gajus 22/10/19
3
Sim, o cluster deve ser privado, mas o mestre pode ser público. Se algum de seus serviços também precisar ser público, eles podem ser expostos por um loadbalancer.
Parag
@Parag É obrigatório que o cluster seja privado? Existe uma maneira, eu posso usar se os IPs do nó são públicos.
Suhas Chikkanna
1
@SuhasChikkanna Com CloudNAT não. Se você quiser que os nós tenham IPs externos, mas também deseje um único IP de saída, poderá criar sua própria instância de gateway NAT usando o Squid e ter um roteamento condicional, que encaminhará seus servidores internos para as instâncias diretamente, mas qualquer tráfego externo será gerado. através do NAT. Isso fornecerá aos usuários um único IP de saída, além de tornar seus nós acessíveis a fontes IP selecionadas.
Parag 9/04
@Parag Parece bom! Definitivamente tentaria isso. Muito obrigado :)
Suhas Chikkanna
1

Você pode tentar esta solução:

https://cloud.google.com/solutions/using-a-nat-gateway-with-kubernetes-engine

Em circunstâncias normais, os nós do Google Kubernetes Engine direcionam todo o tráfego de saída pelo gateway da Internet associado ao cluster de nós. A conexão do gateway da Internet, por sua vez, é definida pela rede do Compute Engine associada ao cluster de nós. Cada nó no cluster possui um endereço IP externo efêmero. Quando os nós são criados e destruídos durante o dimensionamento automático, os novos endereços IP dos nós são alocados automaticamente.

O comportamento padrão do gateway funciona bem em circunstâncias normais. No entanto, convém modificar como os endereços IP externos efêmeros são alocados para:

  • Forneça a um serviço de terceiros um endereço IP externo consistente.
  • Monitore e filtre o tráfego de saída do cluster do Google Kubernetes Engine.
alphayax
fonte