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.
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
- 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.
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Depois de inicializar a CLI gcloud, atualize-a e instale os componentes necessários:
gcloud components update gcloud components install alpha beta
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Depois de inicializar a CLI gcloud, atualize-a e instale os componentes necessários:
gcloud components update gcloud components install alpha beta
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.Aceda à página Redes VPC na Google Cloud consola.
Clique na rede predefinida.
Na secção Sub-redes, clique em Adicionar sub-rede.
Na caixa de diálogo Adicionar uma sub-rede, especifique o seguinte:
- Nome: um nome para a nova sub-rede.
- Região: uma região para a sub-rede. Tem de ser igual à região do cluster.
- 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. - Para o acesso privado à Google, selecione a opção Ativado.
Clique em Adicionar.
Aceda à página do Google Kubernetes Engine na Google Cloud consola.
Clique em
Criar.Clique em Configurar para o GKE Autopilot.
Especifique um Nome e uma Região para o novo cluster. A região tem de ser igual à sub-rede.
Na secção Rede, selecione a opção Cluster privado.
Desmarque a caixa de verificação Aceder ao plano de controlo através do respetivo endereço IP externo.
Na lista pendente Sub-rede do nó, selecione a sub-rede que criou.
Opcionalmente, configure outras definições para o cluster.
Clique em Criar.
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.Aceda à página Instâncias de VM na Google Cloud consola.
Clique em Criar instância.
Especifique o seguinte:
- Nome: o nome da sua VM.
- Região e Zona: a região e a zona da sua VM. Use a mesma região que o seu cluster.
- Tipo de máquina: um tipo de máquina. Escolha um tipo de máquina pequeno, como
e2-micro
. - Para Interfaces de rede, selecione a mesma rede de VPC e sub-rede que o cluster.
- Opcionalmente, configure outras definições para a instância.
Clique em Criar.
Inicie uma sessão na sua VM:
gcloud compute ssh INSTANCE_NAME --tunnel-through-iap --project=PROJECT_ID
Instale o Tinyproxy:
sudo apt install tinyproxy
Abra o ficheiro de configuração do Tinyproxy:
sudo vi /etc/tinyproxy/tinyproxy.conf
No ficheiro, faça o seguinte:
- Verifique se a porta é
8888
. Pesquise a secção
Allow
:/Allow 127
Adicione a seguinte linha à secção
Allow
:Allow localhost
- Verifique se a porta é
Guarde o ficheiro e reinicie o Tinyproxy:
sudo service tinyproxy restart
Sair da sessão:
exit
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.
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"
Especifique o proxy:
export HTTPS_PROXY=localhost:8888 kubectl get ns
O resultado é uma lista de espaços de nomes no cluster privado.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimine o anfitrião bastion que implementou neste tutorial:
gcloud compute instances delete INSTANCE_NAME \ --zone=COMPUTE_ZONE
Elimine o cluster:
gcloud container clusters delete CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION
Elimine a sub-rede:
gcloud compute networks subnets delete SUBNET_NAME \ --region=CONTROL_PLANE_LOCATION
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:
Consola
Crie uma sub-rede da nuvem privada virtual
Crie um cluster privado
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:
Consola
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.
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:
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.