Como criar um cluster privado

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 papéis de usuário comuns do GKE Enterprise.

Restrições e limitações

Clusters particulares precisam ser clusters nativos de VPC. Todos os clusters particulares criados antes de 15 de janeiro de 2020 têm um limite de no máximo 25 clusters por rede, supondo que os peerings não estejam sendo usados para outros fins. Consulte reutilização de peering de VPC para mais informações.

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.

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

  1. Acesse a página Redes VPC no console do Google Cloud.

    Acessar redes VPC

  2. Clique em Criar rede VPC.

  3. Em Nome, insira my-net-0.

  4. Em Modo de criação da sub-rede, selecione Personalizado.

  5. Na caixa Nova sub-rede, para Nome, digite my-subnet-0.

  6. Na lista Região, selecione a região desejada.

  7. Em Intervalo de endereços IP, insira 10.2.204.0/22.

  8. Defina o Acesso privado do Google como Ativado.

  9. Clique em Concluído.

  10. Clique em Criar.

crie um cluster particular

  1. Acesse a página Google Kubernetes Engine no Console do Google Cloud.

    Acessar o Google Kubernetes Engine

  2. Clique em Criar.

  3. Em Nome, especifique private-cluster-0.

  4. No painel de navegação, clique em Rede.

  5. Na lista Rede, selecione my-net-0.

  6. Na lista Sub-rede de nós, selecione my-subnet-0.

  7. Selecione o botão de opção Cluster particular.

  8. Desmarque a caixa de seleção Acesso ao plano de controle usando o endereço IP externo.

  9. Opcional para o Autopilot: defina o Intervalo de IP do plano de controle para 172.16.0.32/28.

  10. 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
    

em que:

  • --create-subnetwork name=my-subnet-0 faz com que o GKE crie automaticamente uma sub-rede denominada my-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-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.

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
    

em que:

  • --create-subnetwork name=my-subnet-1 faz com que o GKE crie automaticamente uma sub-rede denominada my-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-private-nodes indica que os nós do cluster não têm endereços IP externos.

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 principal 192.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

  1. Acesse a página Redes VPC no console do Google Cloud.

    Acessar redes VPC

  2. Clique em Criar rede VPC.

  3. Em Nome, insira my-net-2.

  4. Em Modo de criação da sub-rede, selecione Personalizado.

  5. Na caixa Nova sub-rede, para Nome, digite my-subnet-2.

  6. Na lista Região, selecione a região desejada.

  7. Em Intervalo de endereços IP, insira 192.168.0.0/20.

  8. Clique em Criar um intervalo de IP secundário. Digite my-services em Nome do intervalo da sub-rede e 10.0.32.0/20 em Intervalo de IP secundário.

  9. Clique em Adicionar intervalo de IP. Digite my-pods em Nome do intervalo da sub-rede e 10.4.0.0/14 em Intervalo de IP secundário.

  10. Defina o Acesso privado do Google como Ativado.

  11. Clique em Concluído.

  12. Clique em Criar.

crie um cluster particular

Crie um cluster particular que usa a sub-rede:

  1. Acesse a página Google Kubernetes Engine no console do Google Cloud.

    Acessar o Google Kubernetes Engine

  2. Clique em Criar.

  3. Em Nome, insira private-cluster-2.

  4. No painel de navegação, clique em Rede.

  5. Selecione o botão de opção Cluster particular.

  6. 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.

  7. Opcional para o Autopilot: defina o Intervalo de IP do plano de controle para 172.16.0.16/28.

  8. Na lista Rede, selecione my-net-2.

  9. Na lista Sub-rede de nós, selecione my-subnet-2.

  10. Desmarque a caixa de seleção Criar intervalos secundários automaticamente.

  11. Na lista Intervalo CIDR secundário do pod, selecione my-pods.

  12. Na lista Serviços do intervalo CIDR secundário, selecione my-services.

  13. Marque a caixa de seleção Ativar redes autorizadas do plano de controle.

  14. 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
    

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 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

  1. Acesse a página Google Kubernetes Engine no console do Google Cloud.

    Acessar o Google Kubernetes Engine

  2. Clique em Criar.

  3. Em Nome, insira private-cluster-3.

  4. No painel de navegação, clique em Rede.

  5. Selecione a opção Cluster privado.

  6. Mantenha a caixa de seleção Acessar plano de controle usando o endereço IP externo marcada.

  7. Opcional para o Autopilot: defina o Intervalo de IP do plano de controle para 172.16.0.32/28.

  8. Deixe Rede e sub-rede do nó definidas como default. Dessa forma, o GKE gera uma sub-rede para o cluster.

  9. Desmarque a caixa de seleção Ativar redes autorizadas do plano de controle.

  10. 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
    

em que:

  • --create-subnetwork name=my-subnet-3 faz com que o GKE crie automaticamente uma sub-rede denominada my-subnet-3;
  • --no-enable-master-authorized-networks desativa redes autorizadas para o cluster;
  • --enable-private-nodes indica que os nós do cluster não têm endereços IP externos.

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:

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

  1. Acesse a página Google Kubernetes Engine no console do Google Cloud.

    Acessar o Google Kubernetes Engine

  2. 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

  1. Acesse a página de políticas de firewall no console do Google Cloud.

    Acessar as políticas de firewall

  2. 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

  1. Acesse a página de políticas de firewall no console do Google Cloud.

    Acessar as políticas de firewall

  2. Clique em Criar regra de firewall.

  3. Em Nome, insira o nome desejado para a regra de firewall.

  4. Na lista Rede, selecione a rede relevante.

  5. Em Direção de tráfego, clique em Entrada.

  6. Em Ação se houver correspondência, clique em Permitir.

  7. Na lista Destinos, selecione Tags de destino especificadas.

  8. Em Tags de destino, insira o valor de destino que você anotou anteriormente.

  9. Na lista Filtro de origem, selecione Intervalos IPv4.

  10. Em Intervalos de IPv4 de origem, insira o bloco CIDR do plano de controle do cluster.

  11. 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.

  12. 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 ou udp.
  • 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

  1. Acesse a página Google Kubernetes Engine no console do Google Cloud.

    Acessar o Google Kubernetes Engine

  2. Na lista de clusters, clique no nome do cluster.

  3. Para clusters do Autopilot, na seção Noções básicas sobre clusters, verifique o campo Endpoint externo. O valor é Desativado.

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

  1. Acesse a página Google Kubernetes Engine no console do Google Cloud.

    Acessar o Google Kubernetes Engine

  2. Selecione cada cluster.

  3. Clique em Excluir.

gcloud

gcloud container clusters delete -q private-cluster-0 private-cluster-1 private-cluster-2 private-cluster-3

Excluir a rede

Console

  1. Acesse a página Redes VPC no Console do Google Cloud.

    Acessar redes VPC

  2. Na lista de redes, clique em my-net-0.

  3. Na página Detalhes da rede, clique em Excluir rede VPC.

  4. Na caixa de diálogo Excluir uma rede, clique em Excluir.

gcloud

gcloud compute networks delete my-net-0

A seguir