Nesta página, você aprende a criar um cluster particular do Google Kubernetes Engine (GKE), que é um tipo de cluster nativo de VPC. Em um cluster particular, os nós têm apenas endereços IP internos, o que significa que os nós e os pods estão isolados da Internet por padrão. Você pode optar por não ter acesso de cliente, acesso limitado ou acesso irrestrito ao plano de controle.
Não é possível converter um cluster não particular em um cluster particular. Para saber mais sobre como os clusters particulares funcionam, consulte a Visão geral de clusters particulares.
Esta página é destinada a especialistas em redes que planejam e implementam a segurança de rede. Para saber mais sobre papéis comuns e tarefas de exemplo referenciados no conteúdo do Google Cloud, consulte Tarefas e funções de usuário comuns do GKE Enterprise.
Restrições e limitações
Clusters particulares precisam ser clusters nativos de VPC. Clusters nativos de VPC não são compatíveis com redes legadas.
Expanda as seções a seguir para conferir as regras sobre intervalos de endereços IP e tráfego ao criar um cluster particular.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a Google Cloud CLI para essa tarefa,
instale e, em seguida,
inicialize a
CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão
mais recente executando
gcloud components update
.
Verifique se você tem a permissão correta para criar clusters. Você precisa ser, no mínimo, um Administrador de clusters do Kubernetes Engine.
Verifique se você tem uma rota para o gateway de Internet padrão.
Como criar um cluster privado sem acesso de cliente ao endpoint público
Nesta seção, você criará os recursos a seguir:
- Um cluster particular chamado
private-cluster-0
que tem nós particulares e que não tem acesso de cliente ao endpoint público. - Uma rede chamada
my-net-0
. - Uma sub-rede chamada
my-subnet-0
.
Console
Criar uma rede e uma sub-rede
Acesse a página Redes VPC no console do Google Cloud.
Clique em add_boxCriar rede VPC.
Em Nome, insira
my-net-0
.Em Modo de criação da sub-rede, selecione Personalizado.
Na caixa Nova sub-rede, para Nome, digite
my-subnet-0
.Na lista Região, selecione a região desejada.
Em Intervalo de endereços IP, insira
10.2.204.0/22
.Defina o Acesso privado do Google como Ativado.
Clique em Concluído.
Clique em Criar.
crie um cluster particular
Acesse a página Google Kubernetes Engine no Console do Google Cloud.
Clique em
Criar e, na seção Standard ou Autopilot, clique em Configurar.Em Nome, especifique
private-cluster-0
.No painel de navegação, clique em Rede.
Na lista Rede, selecione my-net-0.
Na lista Sub-rede de nós, selecione my-subnet-0.
Selecione o botão de opção Cluster particular.
Desmarque a caixa de seleção Acesso ao plano de controle usando o endereço IP externo.
Opcional para o Autopilot: defina o Intervalo de IP do plano de controle para
172.16.0.32/28
.Clique em Criar.
gcloud
Para clusters do Autopilot, execute o seguinte comando:
gcloud container clusters create-auto private-cluster-0 \ --create-subnetwork name=my-subnet-0 \ --enable-master-authorized-networks \ --enable-private-nodes \ --enable-private-endpoint
Para clusters padrão, execute o seguinte comando:
gcloud container clusters create private-cluster-0 \ --create-subnetwork name=my-subnet-0 \ --enable-master-authorized-networks \ --enable-ip-alias \ --enable-private-nodes \ --enable-private-endpoint \ --master-ipv4-cidr 172.16.0.32/28
em que:
--create-subnetwork name=my-subnet-0
faz com que o GKE crie automaticamente uma sub-rede denominadamy-subnet-0
;--enable-master-authorized-networks
especifica que o acesso ao endpoint público é restrito aos intervalos de endereços IP que você autorizar;
--enable-ip-alias
torna o cluster nativo da VPC (não necessário para o Autopilot).
--enable-private-nodes
indica que os nós do cluster não têm endereços IP externos.--enable-private-endpoint
indica que o cluster é gerenciado usando o endereço IP interno do endpoint da API do plano de controle.
--master-ipv4-cidr 172.16.0.32/28
especifica um intervalo de endereços IP internos para o plano de controle (opcional para o Autopilot). Essa configuração é permanente para esse cluster e precisa ser exclusiva na VPC. O uso de endereços IP internos não RFC 1918 é compatível.
API
Para criar um cluster sem um plano de controle acessível publicamente, especifique o
campo enablePrivateEndpoint: true
no recurso privateClusterConfig
.
Nesse momento, os únicos endereços IP que têm acesso ao plano de controle são estes:
- O intervalo principal de
my-subnet-0
- O intervalo secundário usado para os pods.
Por exemplo, suponha que você tenha criado uma VM no intervalo principal de my-subnet-0
.
Então, nessa VM, seria possível
configurar kubectl
para usar o endereço IP interno
do plano de controle.
Se você quiser acessar o plano de controle de fora do my-subnet-0
, precisará
autorizar pelo menos um intervalo de endereços a ter acesso ao endpoint particular.
Suponha que você tenha uma VM na rede padrão, na mesma região que seu cluster, mas não em my-subnet-0
.
Por exemplo:
my-subnet-0
:10.0.0.0/22
- intervalo secundário de pods:
10.52.0.0/14
- endereço da VM:
10.128.0.3
Use o comando a seguir para autorizar a VM a acessar o plano de controle:
gcloud container clusters update private-cluster-0 \
--enable-master-authorized-networks \
--master-authorized-networks 10.128.0.3/32
Como criar um cluster privado com acesso limitado ao endpoint público
Ao criar um cluster privado usando essa configuração, é possível optar por usar uma sub-rede gerada automaticamente ou uma sub-rede personalizada.
Como usar uma sub-rede gerada automaticamente
Nesta seção, você cria um cluster particular chamado private-cluster-1
em que o GKE gerar automaticamente uma sub-rede para os nós do cluster.
Ela já tem o recurso “Acesso privado do Google” ativado. Na sub-rede, o GKE cria automaticamente dois intervalos secundários: um para os pods e outro para os serviços.
É possível usar a Google Cloud CLI ou a API GKE.
gcloud
Para clusters do Autopilot, execute o seguinte comando:
gcloud container clusters create-auto private-cluster-1 \ --create-subnetwork name=my-subnet-1 \ --enable-master-authorized-networks \ --enable-private-nodes
Para clusters padrão, execute o seguinte comando:
gcloud container clusters create private-cluster-1 \ --create-subnetwork name=my-subnet-1 \ --enable-master-authorized-networks \ --enable-ip-alias \ --enable-private-nodes \ --master-ipv4-cidr 172.16.0.0/28
em que:
--create-subnetwork name=my-subnet-1
faz com que o GKE crie automaticamente uma sub-rede denominadamy-subnet-1
;--enable-master-authorized-networks
especifica que o acesso ao endpoint público é restrito aos intervalos de endereços IP que você autorizar;
--enable-ip-alias
torna o cluster nativo da VPC (não necessário para o Autopilot).
--enable-private-nodes
indica que os nós do cluster não têm endereços IP externos.
--master-ipv4-cidr 172.16.0.0/28
especifica um intervalo de endereços IP internos para o plano de controle (opcional para o Autopilot). Essa configuração é permanente para esse cluster e precisa ser exclusiva na VPC. O uso de endereços IP internos não RFC 1918 é compatível.
API
Especifique o campo privateClusterConfig
no recurso da API Cluster
:
{
"name": "private-cluster-1",
...
"ipAllocationPolicy": {
"createSubnetwork": true,
},
...
"privateClusterConfig" {
"enablePrivateNodes": boolean # Creates nodes with internal IP addresses only
"enablePrivateEndpoint": boolean # false creates a cluster control plane with a publicly-reachable endpoint
"masterIpv4CidrBlock": string # CIDR block for the cluster control plane
"privateEndpoint": string # Output only
"publicEndpoint": string # Output only
}
}
Nesse momento, os únicos endereços IP que têm acesso ao plano de controle do cluster são estes:
- O intervalo principal de
my-subnet-1
- O intervalo secundário usado para os pods
Imagine que você tem um grupo de máquinas fora da sua rede VPC, com endereços no intervalo 203.0.113.0/29
. Digite o comando abaixo para autorizar que essas máquinas acessem o endpoint público:
gcloud container clusters update private-cluster-1 \
--enable-master-authorized-networks \
--master-authorized-networks 203.0.113.0/29
Agora, estes são os únicos endereços IP que têm acesso ao plano de controle:
- O intervalo principal de
my-subnet-1
- O intervalo secundário usado para os pods.
- Os intervalos autorizados, como
203.0.113.0/29
Como usar uma sub-rede personalizada
Nesta seção, você criará os recursos a seguir:
- Um cluster particular chamado
private-cluster-2
. - Uma rede chamada
my-net-2
. - Uma sub-rede chamada
my-subnet-2
, com intervalo principal192.168.0.0/20
, para seus nós de cluster. Sua sub-rede tem os seguintes intervalos de endereços secundários:my-pods
para os endereços IP de pods.my-services
para os endereços IP do Serviço.
Console
Criar uma rede, sub-rede e intervalos secundários
Acesse a página Redes VPC no console do Google Cloud.
Clique em add_boxCriar rede VPC.
Em Nome, insira
my-net-2
.Em Modo de criação da sub-rede, selecione Personalizado.
Na caixa Nova sub-rede, para Nome, digite
my-subnet-2
.Na lista Região, selecione a região desejada.
Em Intervalo de endereços IP, insira
192.168.0.0/20
.Clique em Criar um intervalo de IP secundário. Digite
my-services
em Nome do intervalo da sub-rede e10.0.32.0/20
em Intervalo de IP secundário.Clique em Adicionar intervalo de IP. Digite
my-pods
em Nome do intervalo da sub-rede e10.4.0.0/14
em Intervalo de IP secundário.Defina o Acesso privado do Google como Ativado.
Clique em Concluído.
Clique em Criar.
crie um cluster particular
Crie um cluster particular que usa a sub-rede:
Acesse a página Google Kubernetes Engine no console do Google Cloud.
Clique em
Criar e, na seção Standard ou Autopilot, clique em Configurar.Em Nome, insira
private-cluster-2
.No painel de navegação, clique em Rede.
Selecione o botão de opção Cluster particular.
Para criar um plano de controle que possa ser acessado por intervalos de IP externos autorizados, mantenha marcada a caixa de seleção Acessar ao plano de controle usando o endereço IP externo.
Opcional para o Autopilot: defina o Intervalo de IP do plano de controle para
172.16.0.16/28
.Na lista Rede, selecione my-net-2.
Na lista Sub-rede de nós, selecione my-subnet-2.
Desmarque a caixa de seleção Criar intervalos secundários automaticamente.
Na lista Intervalo CIDR secundário do pod, selecione my-pods.
Na lista Serviços do intervalo CIDR secundário, selecione my-services.
Marque a caixa de seleção Ativar redes autorizadas do plano de controle.
Clique em Criar.
gcloud
Criar uma rede
Primeiro, crie uma rede para o cluster. O comando a seguir cria uma rede, my-net-2
:
gcloud compute networks create my-net-2 \
--subnet-mode custom
Criar uma sub-rede e intervalos secundários
Em seguida, crie uma sub-rede, my-subnet-2
, na rede my-net-2
, com intervalos secundários my-pods
para pods e my-services
para Services:
gcloud compute networks subnets create my-subnet-2 \
--network my-net-2 \
--range 192.168.0.0/20 \
--secondary-range my-pods=10.4.0.0/14,my-services=10.0.32.0/20 \
--enable-private-ip-google-access
crie um cluster particular
Agora, crie um cluster particular, private-cluster-2
, usando a rede, a sub-rede e os intervalos secundários criados.
Para clusters do Autopilot, execute o seguinte comando:
gcloud container clusters create-auto private-cluster-2 \ --enable-master-authorized-networks \ --network my-net-2 \ --subnetwork my-subnet-2 \ --cluster-secondary-range-name my-pods \ --services-secondary-range-name my-services \ --enable-private-nodes
Para clusters padrão, execute o seguinte comando:
gcloud container clusters create private-cluster-2 \ --enable-master-authorized-networks \ --network my-net-2 \ --subnetwork my-subnet-2 \ --cluster-secondary-range-name my-pods \ --services-secondary-range-name my-services \ --enable-private-nodes \ --enable-ip-alias \ --master-ipv4-cidr 172.16.0.16/28 \ --no-enable-basic-auth \ --no-issue-client-certificate
Nesse momento, os únicos endereços IP que têm acesso ao plano de controle são estes:
- O intervalo principal de
my-subnet-2
- O intervalo secundário
my-pods
Suponha que você tenha um grupo de máquinas fora de my-net-2
que tenham endereços no intervalo 203.0.113.0/29
. Digite o comando abaixo para autorizar que essas máquinas acessem o endpoint público:
gcloud container clusters update private-cluster-2 \
--enable-master-authorized-networks \
--master-authorized-networks 203.0.113.0/29
Nesse momento, os únicos endereços IP que têm acesso ao plano de controle são estes:
- O intervalo principal de
my-subnet-2
- O intervalo secundário
my-pods
- Os intervalos autorizados, como
203.0.113.0/29
Como usar o Cloud Shell para acessar um cluster particular
O cluster particular que você criou na seção Como usar uma sub-rede gerada automaticamente, private-cluster-1
, tem um endpoint público e tem redes autorizadas ativadas. Se você quiser
usar o Cloud Shell para acessar o cluster, adicione o
endereço IP externo do Cloud Shell à lista de redes autorizadas
do cluster.
Para isso, siga estas etapas:
Na janela da linha de comando do Cloud Shell, use
dig
para encontrar o endereço IP externo do seu Cloud Shell:dig +short myip.opendns.com @resolver1.opendns.com
Adicione o endereço externo do seu Cloud Shell à lista de redes autorizadas do cluster:
gcloud container clusters update private-cluster-1 \ --enable-master-authorized-networks \ --master-authorized-networks EXISTING_AUTH_NETS,SHELL_IP/32
Substitua:
EXISTING_AUTH_NETS
: os endereços IP da sua lista atual de redes autorizadas. É possível encontrar suas redes autorizadas no console ou executando o seguinte comando:gcloud container clusters describe private-cluster-1 --format "flattened(masterAuthorizedNetworksConfig.cidrBlocks[])"
SHELL_IP
: é o endereço IP externo do seu Cloud Shell.
Receba as credenciais para poder usar a
kubectl
para acessar o cluster:gcloud container clusters get-credentials private-cluster-1 \ --project=PROJECT_ID \ --internal-ip
Substitua
PROJECT_ID
pela ID do seu projeto.Use
kubectl
, no Cloud Shell, para acessar seu cluster particular:kubectl get nodes
A saída será assim:
NAME STATUS ROLES AGE VERSION gke-private-cluster-1-default-pool-7d914212-18jv Ready <none> 104m v1.21.5-gke.1302 gke-private-cluster-1-default-pool-7d914212-3d9p Ready <none> 104m v1.21.5-gke.1302 gke-private-cluster-1-default-pool-7d914212-wgqf Ready <none> 104m v1.21.5-gke.1302
Como criar um cluster privado com acesso irrestrito ao endpoint público
Nesta seção, você cria um cluster privado em que qualquer endereço IP pode acessar o plano de controle.
Console
Acesse a página Google Kubernetes Engine no console do Google Cloud.
Clique em
Criar e, na seção Standard ou Autopilot, clique em Configurar.Em Nome, insira
private-cluster-3
.No painel de navegação, clique em Rede.
Selecione a opção Cluster privado.
Mantenha a caixa de seleção Acessar plano de controle usando o endereço IP externo marcada.
Opcional para o Autopilot: defina o Intervalo de IP do plano de controle para
172.16.0.32/28
.Deixe Rede e sub-rede do nó definidas como
default
. Dessa forma, o GKE gera uma sub-rede para o cluster.Desmarque a caixa de seleção Ativar redes autorizadas do plano de controle.
Clique em Criar.
gcloud
Para clusters do Autopilot, execute o seguinte comando:
gcloud container clusters create-auto private-cluster-3 \ --create-subnetwork name=my-subnet-3 \ --no-enable-master-authorized-networks \ --enable-private-nodes
Para clusters padrão, execute o seguinte comando:
gcloud container clusters create private-cluster-3 \ --create-subnetwork name=my-subnet-3 \ --no-enable-master-authorized-networks \ --enable-ip-alias \ --enable-private-nodes \ --master-ipv4-cidr 172.16.0.32/28
em que:
--create-subnetwork name=my-subnet-3
faz com que o GKE crie automaticamente uma sub-rede denominadamy-subnet-3
;--no-enable-master-authorized-networks
desativa redes autorizadas para o cluster;
--enable-ip-alias
torna o cluster nativo da VPC (não necessário para o Autopilot).
--enable-private-nodes
indica que os nós do cluster não têm endereços IP externos.
--master-ipv4-cidr 172.16.0.32/28
especifica um intervalo de endereços IP internos para o plano de controle (opcional para o Autopilot). Essa configuração é permanente para esse cluster e precisa ser exclusiva na VPC. O uso de endereços IP internos não RFC 1918 é compatível.
Como adicionar regras de firewall para casos de uso específicos
Esta seção explica como adicionar uma regra de firewall a um cluster privado. Por padrão,
as regras de firewall restringem o plano de controle do cluster a apenas iniciar conexões TCP com os
nós e pods nas portas 443
(HTTPS) e 10250
(kubelet).
Para alguns recursos do Kubernetes, talvez seja necessário adicionar regras de firewall para permitir o acesso em outras portas. Não crie regras de firewall ou
regras de políticas hierárquicas de firewall
que tenham uma
prioridade mais alta
do que as
regras de firewall criadas automaticamente.
Os recursos do Kubernetes que exigem regras de firewall adicionais incluem:
- Webhooks de admissão
- Servidores de API agregados
- Conversão de webhook
- Configuração de auditoria dinâmica
- Geralmente, qualquer API que tenha um campo ServiceReference requer regras de firewall adicionais.
Adicionar uma regra de firewall permite o tráfego do plano de controle do cluster para todos os itens a seguir:
- A porta especificada de cada nó (hostPort).
- a porta especificada de cada pod em execução nesses nós
- A porta especificada de cada Service em execução nesses nós
Para saber mais sobre as regras de firewall, consulte Regras de firewall na documentação do Cloud Load Balancing
Para adicionar uma regra de firewall a um cluster privado, você precisa registrar o bloco CIDR do plano de controle do cluster e o destino usado. Depois de registrá-la, é possível criar a regra.
Etapa 1. Ver o bloco CIDR do plano de controle
Você precisa do bloco CIDR do plano de controle do cluster para adicionar uma regra de firewall.
Console
Acesse a página Google Kubernetes Engine no console do Google Cloud.
Na lista de clusters, clique no nome do cluster.
Na guia Detalhes, em Rede, anote o valor do campo Intervalo de endereços do plano de controle.
gcloud
Execute este comando:
gcloud container clusters describe CLUSTER_NAME
Substitua CLUSTER_NAME
pelo nome do cluster
privado.
Na saída do comando, anote o valor no campo masterIpv4CidrBlock.
Etapa 2. Ver as regras de firewall atuais
É necessário especificar o destino (neste caso, os nós de destino) que as regras de firewall do cluster usam.
Console
Acesse a página de políticas de firewall no console do Google Cloud.
Em Filtrar tabela para regras de firewall da VPC, insira
gke-CLUSTER_NAME
.
Nos resultados, anote o valor no campo Destinos.
gcloud
Execute este comando:
gcloud compute firewall-rules list \
--filter 'name~^gke-CLUSTER_NAME' \
--format 'table(
name,
network,
direction,
sourceRanges.list():label=SRC_RANGES,
allowed[].map().firewall_rule().list():label=ALLOW,
targetTags.list():label=TARGET_TAGS
)'
Na saída do comando, anote o valor no campo Destinos.
Etapa 3. Adicionar uma regra de firewall
Console
Acesse a página de políticas de firewall no console do Google Cloud.
Clique em add_boxCriar regra de firewall.
Em Nome, insira o nome desejado para a regra de firewall.
Na lista Rede, selecione a rede relevante.
Em Direção de tráfego, clique em Entrada.
Em Ação se houver correspondência, clique em Permitir.
Na lista Destinos, selecione Tags de destino especificadas.
Em Tags de destino, insira o valor de destino que você anotou anteriormente.
Na lista Filtro de origem, selecione Intervalos IPv4.
Em Intervalos de IPv4 de origem, insira o bloco CIDR do plano de controle do cluster.
Em Protocolos e portas, clique em Protocolos e portas especificados e marque a caixa de seleção do protocolo relevante (tcp ou udp) e insira o número da porta no campo do protocolo.
Clique em Criar.
gcloud
Execute este comando:
gcloud compute firewall-rules create FIREWALL_RULE_NAME \
--action ALLOW \
--direction INGRESS \
--source-ranges CONTROL_PLANE_RANGE \
--rules PROTOCOL:PORT \
--target-tags TARGET
Substitua:
FIREWALL_RULE_NAME
: o nome escolhido para a regra de firewall.CONTROL_PLANE_RANGE
: o intervalo de endereços IP do plano de controle de cluster (masterIpv4CidrBlock
) coletado anteriormente.PROTOCOL:PORT
: é a porta desejada e o protocolo dela,tcp
ouudp
.TARGET
: é o valor de destino (Targets
) coletado anteriormente.
Verificar se os nós não têm endereços IP externos
Depois de criar um cluster particular, verifique se os nós dele não têm endereços IP externos.
Console
Acesse a página Google Kubernetes Engine no console do Google Cloud.
Na lista de clusters, clique no nome do cluster.
Para clusters do Autopilot, na seção Noções básicas sobre clusters, verifique o campo Endpoint externo. O valor é Desativado.
Para clusters padrão, faça o seguinte:
- Na página Clusters, clique na guia Nós.
- Em Pools de nós, clique no nome do pool.
- Na página Detalhes do pool de nós, em Grupos de instâncias, clique no nome do grupo. Por exemplo, gke-private-cluster-0-default-pool-5c5add1f-grp`.
- Na lista de instâncias, confirme se elas não têm endereços IP externos.
gcloud
Execute este comando:
kubectl get nodes --output wide
A coluna EXTERNAL-IP
da resposta está vazia:
STATUS ... VERSION EXTERNAL-IP OS-IMAGE ...
Ready v.8.7-gke.1 Container-Optimized OS
Ready v1.8.7-gke.1 Container-Optimized OS
Ready v1.8.7-gke.1 Container-Optimized OS
Verificar a reutilização do peering de VPC no cluster
Todos os clusters particulares criados após 15 de janeiro de 2020 reutilizam as conexões do peering da rede VPC.
Para verificar se o cluster particular reutiliza as conexões de peering de rede VPC, use a gcloud CLI ou o console do Google Cloud.
Console
Verifique a linha de Peering de VPC na página de detalhes do cluster. Se o cluster estiver usando novamente as conexões de peering de VPC, a resposta começará com gke-n
.
Por exemplo, gke-n34a117b968dee3b2221-93c6-40af-peer
.
gcloud
gcloud container clusters describe CLUSTER_NAME \
--format="value(privateClusterConfig.peeringName)"
Se o cluster estiver usando novamente as conexões de peering de VPC, a resposta começará com gke-n
. Por exemplo, gke-n34a117b968dee3b2221-93c6-40af-peer
.
Limpeza
Depois de concluir as tarefas nesta página, siga estas etapas para remover os recursos e evitar cobranças indesejadas na conta:
Excluir os clusters
Console
Acesse a página Google Kubernetes Engine no console do Google Cloud.
Selecione cada cluster.
Clique em deleteExcluir.
gcloud
gcloud container clusters delete -q private-cluster-0 private-cluster-1 private-cluster-2 private-cluster-3
Excluir a rede
Console
Acesse a página Redes VPC no Console do Google Cloud.
Na lista de redes, clique em
my-net-0
.Na página Detalhes da rede, clique em deleteExcluir rede VPC.
Na caixa de diálogo Excluir uma rede, clique em Excluir.
gcloud
gcloud compute networks delete my-net-0
A seguir
- Conheça configurações avançadas com clusters particulares.
- Aprenda a criar clusters nativos de VPC.
- Saiba mais sobre o peering de rede VPC.