Aceda remotamente a um cluster privado através de um anfitrião bastion


Este tutorial mostra como aceder a um cluster privado no Google Kubernetes Engine (GKE) através da Internet com um host de bastião.

Pode criar clusters privados do GKE sem acesso de cliente ao ponto final público. Esta opção de acesso melhora a segurança do cluster, impedindo todo o acesso à Internet ao plano de controlo. No entanto, a desativação do acesso ao ponto final público impede a interação remota com o cluster, a menos que adicione o endereço IP do cliente remoto como uma rede autorizada.

Este tutorial mostra como configurar um host bastion, que é uma máquina host de fins especiais concebida para resistir a ataques. O anfitrião bastion usa o Tinyproxy para encaminhar o tráfego do cliente para o cluster. Usa o Identity-Aware Proxy (IAP) para aceder em segurança ao anfitrião bastion a partir do seu cliente remoto.

Objetivos

  • Crie um cluster privado sem acesso ao ponto final público.
  • Implemente uma máquina virtual (VM) do Compute Engine para atuar como um anfitrião de bastião na sub-rede do cluster.
  • Use o IAP para ligar um cliente remoto ao cluster através da Internet.

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  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 (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. Install the Google Cloud CLI.

  6. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a 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 (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. Install the Google Cloud CLI.

  13. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a 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
  16. Criar um cluster privado

    Crie um novo cluster privado sem acesso de cliente ao ponto final público. Coloque o cluster na sua própria sub-rede. Pode fazê-lo através da Google Cloud CLI ou da Google Cloud consola.

    gcloud

    Execute o seguinte 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 o seguinte:

    • CLUSTER_NAME: o nome do novo cluster.
    • CONTROL_PLANE_LOCATION: a região do Compute Engine do plano de controlo do seu cluster.
    • SUBNET_NAME: o nome da nova sub-rede na qual quer colocar o cluster.

    Consola

    Crie uma sub-rede da nuvem privada virtual

    1. Aceda à página Redes VPC na Google Cloud consola.

      Aceda a redes de VPC

    2. Clique na rede predefinida.

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

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

      1. Nome: um nome para a nova sub-rede.
      2. Região: uma região para a sub-rede. Tem de 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. Para o acesso privado à Google, selecione a opção Ativado.
    5. Clique em Adicionar.

    Crie um cluster privado

    1. Aceda à página do Google Kubernetes Engine na Google Cloud consola.

      Aceda ao 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 tem de ser igual à sub-rede.

    5. Na secção Rede, selecione a opção Cluster privado.

    6. Desmarque a caixa de verificação Aceder ao plano de controlo através do respetivo endereço IP externo.

    7. Na lista pendente Sub-rede do nó, selecione a sub-rede que criou.

    8. Opcionalmente, configure outras definições para o cluster.

    9. Clique em Criar.

    Também pode usar um cluster padrão do GKE com a flag --master-ipv4-cidr especificada.

    Crie uma VM de anfitrião de bastion

    Crie uma VM do Compute Engine na rede interna do cluster privado para atuar como um anfitrião de bastião que pode gerir 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 o seguinte:

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

    Consola

    1. Aceda à página Instâncias de VM na Google Cloud consola.

      Aceder às instâncias de VM

    2. Clique em Criar instância.

    3. Especifique o seguinte:

      1. Nome: o nome da sua VM.
      2. Região e Zona: a região e a zona da sua VM. Use a mesma região que o seu cluster.
      3. Tipo de máquina: um tipo de máquina. Escolha um tipo de máquina pequeno, como e2-micro.
      4. Para Interfaces de rede, selecione a mesma rede de VPC e sub-rede que o cluster.
      5. Opcionalmente, configure outras definições para a instância.
    4. Clique em Criar.

    Crie uma regra de firewall

    Para permitir que o IAP se ligue à VM do anfitrião de bastion, crie uma regra de firewall.

    Implemente o proxy

    Com o anfitrião bastion e o cluster privado configurados, tem de implementar um daemon de proxy no anfitrião para encaminhar o tráfego para o plano de controlo do cluster. Para este tutorial, instala o Tinyproxy.

    1. Inicie uma sessão na sua VM:

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

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

      sudo vi /etc/tinyproxy/tinyproxy.conf
      
    4. No ficheiro, faça o seguinte:

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

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

          Allow localhost
        
    5. Guarde o ficheiro e reinicie o Tinyproxy:

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

      exit
      

    Ligue-se ao cluster a partir do cliente remoto

    Depois de configurar o Tinyproxy, tem de configurar o cliente remoto com as credenciais do cluster e especificar o proxy. Faça o seguinte no cliente remoto:

    1. Obtenha credenciais para o cluster:

      gcloud container clusters get-credentials CLUSTER_NAME \
          --location=CONTROL_PLANE_LOCATION \
          --project=PROJECT_ID
      

      Substitua o seguinte:

      • CLUSTER_NAME: o nome do cluster privado.
      • CONTROL_PLANE_LOCATION: a localização do Compute Engine do plano de controlo do seu cluster. Indique uma região para clusters regionais ou uma zona para clusters zonais.
      • PROJECT_ID: o ID do Google Cloud projeto do cluster.
    2. Criar um túnel para o bastion host através do 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
      

      O resultado é uma lista de espaços de nomes no cluster privado.

    Pare de ouvir no cliente remoto

    Se quiser reverter a alteração no cliente remoto em qualquer altura, deve terminar o processo de ouvinte na porta TCP 8888. O comando para o fazer é diferente consoante o sistema operativo do cliente.

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

    Resolução de problemas

    Restrições de firewall em redes empresariais

    Se estiver numa rede empresarial com uma firewall rigorosa, pode não conseguir concluir este tutorial sem pedir uma exceção. Se pedir uma exceção, o intervalo de IPs de origem do anfitrião bastion é 35.235.240.0/20 por predefinição.

    Limpar

    Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

    Elimine o projeto

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Elimine recursos individuais

    1. Elimine o anfitrião bastion que implementou neste tutorial:

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

      gcloud container clusters delete CLUSTER_NAME \
          --location=CONTROL_PLANE_LOCATION
      
    3. Elimine a sub-rede:

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