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.
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
- 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Update and install
gcloud
components: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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, Compute Engine, Identity-Aware Proxy APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Update and install
gcloud
components: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
Acesse a página Redes VPC no Console do Google Cloud.
Clique na rede padrão.
Na seção Sub-redes, clique em Adicionar sub-rede.
Na caixa de diálogo Adicionar uma sub-rede, especifique:
- Nome: um nome para a nova sub-rede.
- Região: uma região para a sub-rede. Precisa 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. - Em Acesso privado do Google, selecione a opção Ativado.
Clique em Adicionar.
crie um cluster privado
Acesse a página Google Kubernetes Engine no Console do Google Cloud.
Clique em
Criar.Clique em Configurar para o GKE Autopilot.
Especifique um Nome e uma Região para o novo cluster. A região precisa ser igual à sub-rede.
Na seção Rede, selecione a opção Cluster particular.
Desmarque a caixa de seleção Acesso ao plano de controle usando o endereço IP externo.
Na lista suspensa Sub-rede de nós, selecione a sub-rede que você criou.
Se quiser, defina outras configurações para o cluster.
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
Acesse a página Instâncias de VMs no Console do Google Cloud.
Clique em Criar instância.
Especifique o seguinte:
- Nome: o nome da VM.
- Região e Zona: a região e a zona da VM. Use a mesma região do cluster.
- Tipo de máquina: um tipo de máquina. Escolha um tipo de máquina pequeno, como
e2-micro
. - Em Interfaces de rede, selecione a mesma rede e sub-rede VPC que o cluster.
- Também é possível definir outras configurações para a instância.
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.
Inicie uma sessão na VM:
gcloud compute ssh INSTANCE_NAME --tunnel-through-iap --project=PROJECT_ID
Instale o Tinyproxy:
sudo apt install tinyproxy
Abra o arquivo de configuração do Tinyproxy:
sudo vi /etc/tinyproxy/tinyproxy.conf
No arquivo:
- Verifique se a porta é
8888
. Pesquise a seção
Allow
:/Allow 127
Adicione a seguinte linha à seção
Allow
:Allow localhost
- Verifique se a porta é
Salve o arquivo e reinicie o Tinyproxy:
sudo service tinyproxy restart
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:
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.
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"
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
- 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.
Excluir recursos individuais
Exclua o Bastion Host que você implantou neste tutorial:
gcloud compute instances delete INSTANCE_NAME \ --zone=COMPUTE_ZONE
Exclua o cluster:
gcloud container clusters delete CLUSTER_NAME \ --region=COMPUTE_REGION
Exclua a sub-rede:
gcloud compute networks subnets delete SUBNET_NAME \ --region=COMPUTE_REGION