Acessar remotamente um cluster particular usando um Bastion Host


Neste tutorial, você verá como acessar um cluster particular no Google Kubernetes Engine (GKE) pela Internet usando um Bastion Host.

É possível criar clusters particulares do GKE sem acesso de cliente ao endpoint público. Essa opção de acesso melhora a segurança do cluster impedindo qualquer acesso da Internet ao plano de controle. No entanto, desativar o acesso ao endpoint público impede que você interaja com o cluster remotamente, a menos que você adicione o endereço IP do cliente remoto como uma rede autorizada.

Neste tutorial, você verá como configurar um Bastion Host, que é uma máquina host especial criada para conter ataque. O Bastion Host usa Tinyproxy para encaminhar o tráfego do cliente para o cluster. Use o Identity-Aware Proxy (IAP) para acessar com segurança o Bastion Host pelo cliente remoto.

Objetivos

  • Criar um cluster particular sem acesso ao endpoint público.
  • Implantar uma máquina virtual (VM) do Compute Engine para atuar como um Bastion Host na sub-rede do cluster.
  • Usar o IAP para conectar um cliente remoto ao cluster pela Internet.

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative as APIs GKE, Compute Engine, Identity-Aware Proxy.

    Ative as APIs

  5. Instale a CLI do Google Cloud.
  6. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  7. Atualize e instale os componentes gcloud:
    gcloud components update
    gcloud components install alpha beta
  8. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  9. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  10. Ative as APIs GKE, Compute Engine, Identity-Aware Proxy.

    Ative as APIs

  11. Instale a CLI do Google Cloud.
  12. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  13. Atualize e instale os componentes gcloud:
    gcloud components update
    gcloud components install alpha beta

Crie um cluster particular

Crie um novo cluster particular sem acesso de cliente ao endpoint público. Coloque o cluster na própria sub-rede. É possível fazer isso usando a Google Cloud CLI ou o console do Google Cloud.

gcloud

Execute este comando:

gcloud container clusters create-auto CLUSTER_NAME \
    --region=COMPUTE_REGION \
    --create-subnetwork=name=SUBNET_NAME \
    --enable-master-authorized-networks \
    --enable-private-nodes \
    --enable-private-endpoint

Substitua:

  • CLUSTER_NAME: o nome do novo cluster;
  • COMPUTE_REGION: a região do Compute Engine para o cluster.
  • SUBNET_NAME: o nome da nova sub-rede em que você quer colocar o cluster.

Console

Crie uma sub-rede de nuvem privada virtual

  1. Acesse a página Redes VPC no Console do Google Cloud.

    Acessar redes VPC

  2. Clique na rede padrão.

  3. Na seção Sub-redes, clique em Adicionar sub-rede.

  4. Na caixa de diálogo Adicionar uma sub-rede, especifique:

    1. Nome: um nome para a nova sub-rede.
    2. Região: uma região para a sub-rede. Precisa ser igual à região do cluster.
    3. Intervalo de endereços IP: especifique 10.2.204.0/22 ou outro intervalo que não entre em conflito com outros intervalos na rede VPC.
    4. Em Acesso privado do Google, selecione a opção Ativado.
  5. Clique em Add.

crie um cluster privado

  1. Acesse a página Google Kubernetes Engine no Console do Google Cloud.

    Acessar o Google Kubernetes Engine

  2. Clique em Criar.

  3. Clique em Configurar para o GKE Autopilot.

  4. Especifique um Nome e uma Região para o novo cluster. A região precisa ser igual à sub-rede.

  5. Na seção Rede, selecione a opção Cluster particular.

  6. Desmarque a caixa de seleção Acesso ao plano de controle usando o endereço IP externo.

  7. Na lista suspensa Sub-rede de nós, selecione a sub-rede que você criou.

  8. Se quiser, defina outras configurações para o cluster.

  9. Clique em Criar.

Também é possível usar um cluster padrão do GKE com a sinalização --master-ipv4-cidr especificada.

Criar uma VM do Bastion Host

Crie uma VM do Compute Engine na rede interna do cluster particular para atuar como um Bastion Host que pode gerenciar o cluster.

gcloud

Crie uma VM do Compute Engine:

gcloud compute instances create INSTANCE_NAME \
    --zone=COMPUTE_ZONE \
    --machine-type=e2-micro \
    --network-interface=no-address,network-tier=PREMIUM,subnet=SUBNET_NAME

Substitua:

  • INSTANCE_NAME: o nome da VM.
  • COMPUTE_ZONE: a zona do Compute Engine para a VM. Coloque-o na mesma região do cluster.
  • SUBNET_NAME: a sub-rede em que você quer colocar a VM.

Console

  1. Acesse a página Instâncias de VMs no Console do Google Cloud.

    Acessar instâncias de VM

  2. Clique em Criar instância.

  3. Especifique o seguinte:

    1. Nome: o nome da VM.
    2. Região e Zona: a região e a zona da VM. Use a mesma região do cluster.
    3. Tipo de máquina: um tipo de máquina. Escolha um tipo de máquina pequeno, como e2-micro.
    4. Em Interfaces de rede, selecione a mesma rede e sub-rede VPC que o cluster.
    5. Também é possível definir outras configurações para a instância.
  4. Clique em Criar.

Criar regra de firewall

Para permitir que o IAP se conecte à sua VM do Bastion Host, crie uma regra de firewall.

Implante o proxy

Com o Bastion Host e o cluster particular configurados, é preciso implantar um daemon de proxy no host para encaminhar o tráfego para o plano de controle do cluster. Neste tutorial, você instalará o Tinyproxy.

  1. Inicie uma sessão na VM:

    gcloud compute ssh INSTANCE_NAME --tunnel-through-iap --project=PROJECT_ID
    
  2. Instale o Tinyproxy:

    sudo apt install tinyproxy
    
  3. Abra o arquivo de configuração do Tinyproxy:

    sudo vi /etc/tinyproxy/tinyproxy.conf
    
  4. No arquivo:

    1. Verifique se a porta é 8888.
    2. Pesquise a seção Allow:

        /Allow 127
      
    3. Adicione a seguinte linha à seção Allow:

        Allow localhost
      
  5. Salve o arquivo e reinicie o Tinyproxy:

    sudo service tinyproxy restart
    
  6. Saia da sessão:

    exit
    

Conectar-se ao cluster pelo cliente remoto

Depois de configurar o Tinyproxy, configure o cliente remoto com credenciais de cluster e especifique o proxy. Faça o seguinte no cliente remoto:

  1. Receba as credenciais para o cluster:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --region=COMPUTE_REGION \
        --project=PROJECT_ID
    

    Substitua:

    • CLUSTER_NAME: o nome do cluster particular.
    • COMPUTE_REGION: a região do cluster.
    • PROJECT_ID: o ID do projeto do Google Cloud do cluster.
  2. Túnel para o Bastion Host usando o IAP:

    gcloud compute ssh INSTANCE_NAME \
        --tunnel-through-iap \
        --project=PROJECT_ID \
        --zone=COMPUTE_ZONE \
        --ssh-flag="-4 -L8888:localhost:8888 -N -q -f"
    
  3. Especifique o proxy:

    export HTTPS_PROXY=localhost:8888
    kubectl get ns
    

    A saída é uma lista de namespaces no cluster particular.

Parar de detectar no cliente remoto

Para reverter a alteração no cliente remoto a qualquer momento, encerre o processo do listener na porta TCP 8888. O comando para fazer isso é diferente, dependendo do sistema operacional cliente.

netstat -lnpt | grep 8888 | awk '{print $7}' | grep -o '[0-9]\+' | sort -u | xargs sudo kill

Solução de problemas

Restrições de firewall em redes empresariais

Se você estiver em uma rede corporativa com um firewall rigoroso, talvez não seja possível concluir este tutorial sem solicitar uma exceção. Se você solicitar uma exceção, o intervalo de IP de origem do Bastion Host será 35.235.240.0/20 por padrão.

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Exclua o projeto

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

Excluir recursos individuais

  1. Exclua o Bastion Host que você implantou neste tutorial:

    gcloud compute instances delete INSTANCE_NAME \
        --zone=COMPUTE_ZONE
    
  2. Exclua o cluster:

    gcloud container clusters delete CLUSTER_NAME \
        --region=COMPUTE_REGION
    
  3. Exclua a sub-rede:

    gcloud compute networks subnets delete SUBNET_NAME \
        --region=COMPUTE_REGION