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, use a calculadora de preços.

Novos Google Cloud usuários podem estar qualificados para um teste sem custo financeiro.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Para mais informações, consulte Limpeza.

Antes de começar

  1. Faça login na sua Google Cloud conta do. Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho dos 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Instale a Google Cloud CLI.

  6. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  7. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  8. Depois de inicializar a CLI gcloud, atualize-a e instale os componentes necessários:

    gcloud components update
    gcloud components install alpha beta
  9. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  10. Verify that billing is enabled for your Google Cloud project.

  11. Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  12. Instale a Google Cloud CLI.

  13. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  14. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  15. Depois de inicializar a CLI gcloud, atualize-a e instale os componentes necessários:

    gcloud components update
    gcloud components install alpha beta

Criar 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 Google Cloud console.

gcloud

Execute este comando:

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

Substitua:

Console

Crie uma sub-rede de nuvem privada virtual

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

    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 Adicionar.

Criar um cluster particular

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

    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 VM 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 \
        --location=CONTROL_PLANE_LOCATION \
        --project=PROJECT_ID
    

    Substitua:

    • CLUSTER_NAME: o nome do cluster particular.
    • CONTROL_PLANE_LOCATION: o local do Compute Engine do plano de controle do cluster. Forneça uma região para clusters regionais ou uma zona para clusters zonais.
    • PROJECT_ID: o ID do Google Cloud projeto 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.

Excluir o projeto

  1. No Google Cloud console, 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 Desligar para excluir o projeto.

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 \
        --location=CONTROL_PLANE_LOCATION
    
  3. Exclua a sub-rede:

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