Como usar um gateway NAT com o Kubernetes Engine

Neste tutorial, mostramos como definir novos mapeamentos de endereço IP de nó usando gateways de conversão de endereços de rede (NAT).

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

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

  • fornecer um serviço de terceiros com um endereço IP externo consistente;
  • monitorar e filtrar o tráfego de saída do cluster do Google Kubernetes Engine.

Neste tutorial, você aprenderá a realizar as seguintes tarefas:

  1. Criar uma instância de gateway NAT e configurar os detalhes de roteamento dele para um cluster existente do Google Kubernetes Engine.
  2. Criar uma regra de roteamento personalizada para a instância do gateway NAT.

No diagrama a seguir, veja um panorama da arquitetura:

arquitetura de um gateway NAT

Objetivos

  • Usar o Terraform para criar uma instância do gateway NAT.
  • Criar uma regra de roteamento de rede de saída para um cluster existente do Google Kubernetes Engine.
  • Verificar se o tráfego de saída de um pod é encaminhado pelo gateway NAT.

Custos

Neste tutorial, usamos componentes faturáveis do GCP:

  • Google Kubernetes Engine
  • Compute Engine

Use a calculadora de preços para estimar o custo do ambiente. Os recursos usados neste tutorial, incluindo o cluster do Kubernetes Engine, custam cerca de US$ 3,19 por dia.

Antes de começar

  1. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. Selecione ou crie um projeto do GCP.

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado para o projeto.

    Saiba como ativar o faturamento

  4. Ativar Compute Engine e Google Kubernetes Engine APIs.

    Ativar a de APIs

Como criar o gateway NAT com o Terraform

Neste tutorial, usamos o Gateway NAT modular no Compute Engine para Terraform com o objetivo de automatizar a criação do grupo de instâncias gerenciadas do gateway NAT. Você direciona o tráfego das instâncias usando o roteamento baseado em tags, mas apenas as instâncias com tags correspondentes usam a rota do gateway NAT.

A prioridade padrão das rotas do Compute Engine é 1.000, sendo que os números mais baixos indicam prioridade mais alta. O módulo Terraform cria uma rota do Compute Engine com prioridade 800, redirecionando todo o tráfego de saída dos nós do Google Kubernetes Engine para a instância do gateway NAT em vez de usar o gateway de Internet padrão. O código de exemplo no módulo também cria uma rota estática com prioridade 700, redirecionando o tráfego dos nós do Google Kubernetes Engine para o mestre do Google Kubernetes Engine, que preserva a operação normal do cluster dividindo o tráfego de saída.

Depois que a instância do gateway NAT estiver em execução, o script de inicialização configurará o encaminhamento de IP e adicionará as regras de firewall necessárias para executar a conversão de endereço.

  1. Abra o Cloud Shell e clone o repositório do GitHub:

    ABRA NO CLOUD SHELL

    O repositório inclui o gateway NAT modular no Compute Engine para Terraform. Este exemplo funciona com clusters zonais, regionais e particulares.

  2. Navegue até o diretório examples/gke-nat-gateway:

    cd examples/gke-nat-gateway
    

  3. Configure o ambiente do Cloud Shell para usar a versão mais recente do Terraform instalando-a com o script auxiliar:

    curl -sLO https://raw.githubusercontent.com/GoogleCloudPlatform/terraform-google-nat-gateway/master/examples/terraform-install.sh
    bash terraform-install.sh
    source ${HOME}/.bashrc
    

  4. Defina variáveis para nome, região e zona do cluster. Elas serão usadas ao longo deste tutorial.

    CLUSTER_NAME=dev-nat
    REGION=us-central1
    ZONE=us-central1-f
    NETWORK=default
    SUBNETWORK=default
    

  5. Crie um cluster do Google Kubernetes Engine na zona us-central1-f:

    gcloud container clusters create ${CLUSTER_NAME:0:20} --zone ${ZONE}

  6. Crie o arquivo terraform.tfvars usando as variáveis REGION, ZONE, NETWORK e SUBNETWORK:

    echo "region = \"${REGION}\"" > terraform.tfvars
    echo "zone = \"${ZONE}\"" >> terraform.tfvars
    echo "network = \"${NETWORK}\"" >> terraform.tfvars
    echo "subnetwork = \"${SUBNETWORK}\"" >> terraform.tfvars
    

  7. Extraia o IP mestre do Google Kubernetes Engine e o nome da tag de rede usando a ferramenta de linha de comando gcloud e adicione-os ao arquivo terraform.tfvars:

    NODE_TAG=$(gcloud compute instance-templates describe $(gcloud compute instance-templates list --filter=name~gke-${CLUSTER_NAME:0:20} --limit=1 --uri) --format='get(properties.tags.items[0])')
    echo "gke_master_ip = \"$(gcloud compute firewall-rules describe ${NODE_TAG/-node/-ssh} --format='value(sourceRanges)')\"" >> terraform.tfvars
    echo "gke_node_tag = \"${NODE_TAG}\"" >> terraform.tfvars
    

  8. Defina a variável de ambiente GOOGLE_PROJECT usada pelo Terraform:

    export GOOGLE_PROJECT=$(gcloud config get-value project)

  9. Implante o gateway NAT usando comandos do Terraform:

    terraform init
    terraform plan -out terraform.tfplan
    terraform apply terraform.tfplan
    

Agora você tem um cluster do Google Kubernetes Engine, uma instância do gateway NAT e uma rota do Compute Engine configurados para o cluster. Na próxima seção, veja como verificar se o tráfego de cluster de saída é encaminhado por meio da instância do gateway NAT.

Verificar o encaminhamento do gateway NAT

  1. Para exibir o endereço IP externo que o node do cluster está usando, execute um pod do Kubernetes que usa curl:

    kubectl run example -i -t --rm --restart=Never --image centos:7 -- curl -s http://ipinfo.io/ip

    A saída do comando run exibe o endereço IP externo do gateway NAT. Esse endereço está disponível como uma variável de saída do Terraform.

  2. Extraia o valor da variável external_ip:

    terraform output ip-nat-gateway

    Verifique se a saída do pod da etapa anterior corresponde ao endereço IP externo da instância do gateway NAT.

Você verificou que o gateway NAT do cluster do Google Kubernetes Engine está funcionando conforme o esperado.

Acessar nós de cluster com SSH

Quando o gateway NAT estiver funcionando, a conexão SSH do Console do GCP não funcionará mais para os nós do cluster. Para estabelecer uma conexão SSH com um nó de cluster, use os seguintes comandos para usar a instância de computação do gateway NAT como um Bastion Host:

eval ssh-agent $SHELL;
gcloud -q compute config-ssh;
ssh-add ~/.ssh/google_compute_engine;
CLUSTER_NAME=dev-nat;
REGION=us-central1;
NODE=$(gcloud compute instances list --filter=name~gke-${CLUSTER_NAME}- --limit=1 --format='value(name)');
gcloud compute ssh $(gcloud compute instances list --filter=name~nat-gateway-${REGION} --uri) --ssh-flag="-A" -- ssh ${NODE} -o StrictHostKeyChecking=no;

Limpeza

Para evitar cobranças dos recursos usados neste tutorial na conta do Google Cloud Platform:

  1. Remova os recursos que o Terraform criou:

    terraform destroy

  2. Exclua o cluster do Google Kubernetes Engine:

    CLUSTER_NAME=dev-nat;
    ZONE=us-central1-f;
    gcloud container clusters delete ${CLUSTER_NAME} --zone ${ZONE};
    

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…