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.
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
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.
Crie um cluster privado
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.
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
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.
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.
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
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:
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.
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.