Como criar um cluster nativo de VPC

Nesta página, você aprende a configurar clusters nativos de VPC no Google Kubernetes Engine.

Visão geral

No GKE, os clusters podem ser diferenciados de acordo com a maneira como direcionam o tráfego de um pod para outro. Um cluster que usa IPs de alias é chamado de cluster nativo de VPC. Um cluster que usa rotas do Google Cloud Platform é chamado de cluster baseado em rotas.

Benefícios dos IPs de alias

O uso de endereços IP de alias tem vários benefícios:

  • Os IPs de pods são encaminhados nativamente dentro da rede do GCP, inclusive por meio de peering de redes VPC, e não usam mais a cota da rota.
  • Os IPs de pods são reservados na rede antes da criação do cluster, o que evita o conflito com outros recursos de computação.
  • Os controles de firewall para pods podem ser aplicados separadamente dos respectivos nós.
  • A camada de rede pode realizar verificações anti-spoofing para garantir que o tráfego de saída não seja enviado com endereços IP de origem arbitrários.
  • Endereços IP com alias podem ser anunciados por meio do BGP pelo Cloud Router.
  • Os endereços IP do alias permitem que os pods acessem diretamente os serviços hospedados sem usar um gateway NAT.

Restrições

  • Não é possível migrar um cluster nativo de VPC para um cluster baseado em rotas.

  • Não é possível migrar um cluster baseado em rotas para um cluster nativo de VPC.

  • Não é possível usar redes legadas com clusters nativos de VPC. Para criar um cluster em uma rede legada, crie um cluster baseado em rotas.

  • Os IPs de cluster para serviços internos estão disponíveis somente dentro do cluster. Se quiser acessar um serviço do Kubernetes dentro da VPC, mas de fora do cluster (por exemplo, de uma instância do Compute Engine), use um balanceador de carga interno.

Antes de começar

Execute as etapas a seguir para se preparar para a tarefa:

  • Verifique se você ativou a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Verifique se o SDK do Cloud está instalado.
  • Defina o ID do projeto padrão:
    gcloud config set project [PROJECT_ID]
  • Se você estiver trabalhando com clusters zonais, defina a zona padrão do Compute:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Se você estiver trabalhando com clusters regionais, defina a região padrão do Compute:
    gcloud config set compute/region [COMPUTE_REGION]
  • Atualize gcloud para a versão mais recente:
    gcloud components update

Intervalos secundários

Os clusters nativos de VPC usam dois intervalos de endereços IP secundários:

  • Um intervalo de endereços para pods
  • Um intervalo de endereços para Serviços

Em um cluster nativo de VPC, o esquema de alocação é diferente do esquema usado em um cluster baseado em rotas. Nele, um intervalo CIDR é alocado para pods e serviços. Em um cluster nativo de VPC, um intervalo CIDR é alocado para pods, e um intervalo CIDR separado é alocado para os serviços.

Gerenciamento de intervalo secundário

Há duas maneiras de associar intervalos secundários ao cluster:

Gerenciado pelo GKE

É possível permitir que os intervalos secundários sejam gerenciados pelo GKE. Esse é o modo padrão usado quando você cria um cluster.

Ao criar um cluster, é possível especificar os intervalos de CIDR para seus pods e serviços ou definir tamanhos para os intervalos de pods e serviços. Por exemplo, é possível especificar um intervalo de 10.0.0.0/16 ou um tamanho de /16.

Gerenciado pelo usuário

É possível criar manualmente os intervalos secundários e, em seguida, criar um cluster que use esses intervalos. Se você criar manualmente os intervalos secundários, precisará gerenciá-los por conta própria.

Com a VPC compartilhada, o proprietário do projeto host cria os intervalos secundários e os transmite a locatários para que usem com os clusters deles nos projetos de serviços. Os usuários que criam clusters do GKE em projetos de serviços não podem criar intervalos secundários com as credenciais de locatário deles.

Observações para escalonamento de clusters

O número máximo de pods e serviços para determinado cluster do GKE é determinado pelo tamanho dos intervalos secundários do cluster. Não é possível alterar os tamanhos do intervalo secundário depois de criar um cluster. Ao criar um cluster, escolha intervalos secundários grandes o suficiente para acomodar o crescimento previsto.

A tabela a seguir descreve os três intervalos que você precisa considerar: nós, pods e serviços.

Intervalo Orientação
Nós

Os IPs dos nós são recebidos do intervalo principal da sub-rede associada ao cluster. Sua sub-rede de clusters precisa ser grande o suficiente para acomodar o número total de nós do cluster.

Por exemplo, se você planeja criar um cluster de 900 nós, a sub-rede usada com o cluster precisa ter pelo menos um tamanho /22. Uma sub-rede com tamanho /22 contém 2(32-22) = 210 = 1.024 - 4 endereços IP reservados = 1.020 endereços IP, o que é suficiente para os endereços IP de 900 nós necessários para o cluster.

Pods

Cada nó, por padrão, aloca um bloco /24 (2(32-24) = 28 = 256) do intervalo de endereços de pods.

Por exemplo, para um cluster de 900 nós, você precisa de 900 x 256 = 230.400 endereços IP. Os endereços IP precisam ter blocos de tamanho /24, porque essa é a granularidade atribuída a um nó. Você precisa de um intervalo secundário de tamanho /14 ou maior. Um intervalo /14 de endereços IP resulta em 2(32-14) = 218 ≈ 262.000 endereços IP.

Observação: é possível configurar os nós para alocar um intervalo específico de IPs para nós a fim de limitar o número de pods que podem ser executados por cada nó. Todos os cálculos acima se baseiam no /24 padrão (256 endereços IP). Consulte Como otimizar a alocação de endereços IP para mais informações.

Serviços

Todo cluster precisa reservar um intervalo para os endereços IP do cluster do serviço do Kubernetes. Os endereços IP de serviços são atribuídos a partir do intervalo secundário associado para serviços. Você precisa garantir que o bloco de IPs seja suficiente para o número total de serviços que espera executar no cluster.

Por exemplo, para um cluster que executa no máximo 3.000 serviços, você precisa de 3.000 endereços IP a serem usados para IPs de cluster. Você precisa de um intervalo secundário de tamanho /20 ou maior. Um intervalo /20 de endereços IP resulta em 2(32-20) = 212 ≈ 4.000 endereços IP.

A criação de nós é limitada aos endereços disponíveis para alocar a partir do intervalo de endereços de pods. A criação de nós falha com o erro Instance [instance name] creation failed: IP space of [cluster subnet] is exhausted quando não há mais endereços IP disponíveis no intervalo de endereços do pod. Por padrão, nós recém-criados alocam um bloco /24 (256 endereços IP) do intervalo de endereços do pod, mas isso pode ser diferente se você definir um número máximo de pods por nó.

Se você estiver usando intervalos secundários gerenciados pelo usuário, consulte a tabela abaixo para garantir que seja possível alcançar o máximo de nós de um determinado tamanho de sub-rede do cluster.

Tamanho da sub-rede para nós Máximo de nós Máximo de endereços IP de pod necessários Intervalo de endereços de pods recomendado
/29 4 1.024 /21
/28 12 3.072 /20
/27 28 7.168 /19
/26 60 15.360 /18
/25 124 31.744 /17
/24 252 64.512 /16
/23 508 130.048 /15
/22 1.020 261.120 /14
/21 2.044 523.264 /13
/20 4.092 1.047.552 /12
/19 8.188 2.096.128 /11 (intervalo máximo de endereços de pods)

Padrões e limites de tamanhos de intervalos

Intervalo Tamanho padrão Tamanho mínimo Tamanho máximo
Nós (sub-rede de cluster)

/20 = 212 = 4.096 - 4 endereços IP reservados = 4.092 endereços IP para nós

/29 = 23 = 8 - 4 endereços IP reservados = 4 endereços IP para nós

/7 = 225 = aproximadamente 33 milhões de endereços IP para nós

Pods (intervalo secundário)

/14 = 218 = 262.114 endereços IP alocados para pods

/24 = 28 = 256 endereços IP alocados para pods


/21 = 211 = 2.048 endereços IP alocados para pods (intervalos gerenciados pelo GKE)

/11 = 221 = aproximadamente dois milhões de endereços IP

Serviços (intervalo secundário)

/20 = 212 = 4.096 endereços IP alocados para serviços

/27 = 25 = 32 endereços IP alocados para serviços

/16 = 216 = 65.536 endereços IP alocados para serviços

Como criar um cluster nativo de VPC

Para criar um cluster nativo de VPC, é possível usar o Console do Google Cloud Platform, a ferramenta de linha de comando gcloud ou a API GKE.

gcloud

Para criar o cluster nativo de VPC, execute o comando a seguir, em que [CLUSTER_NAME] é o nome escolhido para o cluster:

gcloud container clusters create [CLUSTER_NAME] --enable-ip-alias

Console

Para criar um cluster nativo de VPC, execute estas etapas:

  1. Acesse o menu do Google Kubernetes Engine no Console do GCP.

    Acessar o menu do Google Kubernetes Engine

  2. Clique em Criar cluster.

  3. Configure o cluster como quiser. Em seguida, clique em Opções avançadas.

  4. Na seção Cluster nativo de VPC, deixe a opção Ativar cluster nativo de VPC (usando o IP do alias) selecionada.

  5. Clique em Criar.

API

Para criar um cluster nativo de VPC, defina um objeto IPAlocationPolicy no recurso do cluster:

{
  "name": [CLUSTER_NAME],
  "description": [DESCRIPTION],
  ...
  "ipAllocationPolicy": {
    "useIpAliases": true,
    "clusterIpv4CidrBlock"      : string,
    "servicesIpv4CidrBlock"     : string,
    "clusterSecondaryRangeName" : string,
    "servicesSecondaryRangeName": string,

  },
  ...
}

em que:

  • "clusterIpv4CidrBlock" é o tamanho/local do intervalo CIDR para pods. Determina o tamanho do intervalo secundário de pods e pode ser IP/tamanho em notação CIDR (como 10.0.0.0/14) ou /tamanho (como /14). Um espaço vazio com o tamanho especificado é escolhido do espaço disponível na VPC. Se deixado em branco, um intervalo válido será encontrado e criado com um tamanho padrão;
  • "servicesIpv4CidrBlock" é o tamanho/local do intervalo CIDR para Serviços. Veja a descrição de "clusterIpv4CidrBlock";
  • "clusterSecondaryRangeName" é o nome do intervalo secundário de pods. É obrigatório que o intervalo secundário já exista e pertença à sub-rede associada ao cluster (como a sub-rede especificada com a sinalização --subnetwork);
  • "serviceSecondaryRangeName" é o nome do intervalo secundário para Serviços. O intervalo secundário já precisa existir e pertencer à sub-rede associada ao cluster (como a sub-rede especificada pela sinalização --subnetwork).

Para mais exemplos de cluster, consulte Exemplos.

Como verificar os intervalos secundários do cluster

Depois de criar um cluster nativo de VPC, verifique os intervalos do cluster.

gcloud

Para verificar o cluster, execute o seguinte comando:

gcloud container clusters describe [CLUSTER_NAME]

Na saída do comando, observe o campo ipAllocationPolicy:

  • clusterIpv4Cidr é o intervalo secundário de pods.
  • servicesIpv4Cidr é o intervalo secundário de serviços.

Console

Para verificar o cluster, siga estas etapas:

  1. Acesse o menu do Google Kubernetes Engine no Console do GCP.

    Acessar o menu do Google Kubernetes Engine

  2. Selecione o cluster desejado.

Os intervalos secundários são exibidos na seção Cluster sob a guia Detalhes:

  • O intervalo de endereços do contêiner é o intervalo secundário dos pods.
  • O intervalo de endereços de serviço é o intervalo secundário dos serviços.

Exemplos

Nas seções a seguir, você verá exemplos de uso de clusters nativos de VPC.

Como criar um cluster com intervalos de IPs específicos

gcloud

Este comando cria my-cluster com os intervalos de pods e serviços fornecidos. Os intervalos secundários são criados automaticamente, anexados à sub-rede padrão e gerenciados pelo GKE:

gcloud container clusters create my-cluster \
  --enable-ip-alias --cluster-ipv4-cidr=10.0.0.0/14 \
  --services-ipv4-cidr=10.4.0.0/19

Console

Isso cria my-cluster com os intervalos de pods e serviços fornecidos. Os intervalos secundários são criados automaticamente, anexados à sub-rede padrão e gerenciados pelo GKE:

  1. Acesse o menu do Google Kubernetes Engine no Console do GCP.

    Acessar o menu do Google Kubernetes Engine

  2. Clique em Criar cluster.

  3. Configure o cluster como quiser. Em seguida, clique em Opções avançadas.

  4. Na seção Cluster nativo de VPC, deixe a opção Ativar cluster nativo de VPC (usando o IP do alias) selecionada.

  5. Preencha o campo Intervalo de endereços do pod com o intervalo de pod. Por exemplo, 10.0.0.0/14.

  6. Preencha o campo Intervalo de endereços do serviço com o intervalo de serviço. Por exemplo, 10.4.0.0/19.

Como criar um cluster com tamanhos específicos em uma sub-rede diferente

Este comando cria my-cluster com os tamanhos de intervalo de serviços e pods especificados. O local do intervalo CIDR é determinado pelo espaço livre na VPC. Os intervalos secundários são criados e anexados à sub-rede my-subnet. Eles são gerenciados pelo GKE:

gcloud container clusters create my-cluster \
  --enable-ip-alias\
  --subnetwork my-subnet \
  --cluster-ipv4-cidr=/16 \
  --services-ipv4-cidr=/22

Como criar um cluster com intervalos secundários atuais

Para detalhes sobre como criar intervalos secundários, consulte Visão geral de intervalos IP de alias.

Você precisa criar dois intervalos secundários na sub-rede, um chamado my-pods para pods e outro chamado my-services para serviços:

gcloud compute networks subnets update my-subnet \
    --add-secondary-ranges my-pods=10.0.0.0/16,my-services=10.1.0.0/16 \
    --region us-central1

Então, para criar seu cluster:

gcloud

Execute este comando:

gcloud container clusters create my-cluster \
--enable-ip-alias \
--cluster-secondary-range-name=my-pods \
--services-secondary-range-name=my-services

Console

Siga as etapas abaixo:

  1. Acesse o menu do Google Kubernetes Engine no Console do GCP.

    Acessar o menu do Google Kubernetes Engine

  2. Clique em Criar cluster.

  3. Configure o cluster como quiser. Em seguida, clique em Opções avançadas.

  4. Na seção Cluster nativo de VPC, deixe a opção Ativar cluster nativo de VPC (usando o IP do alias) selecionada.

  5. Defina Criar intervalos secundários automaticamente como falso.

  6. Selecione a Rede e a Sub-rede de nós que você quer usar com seu cluster.

  7. Selecione o Intervalo secundário do pod e o Intervalo secundário dos serviços para usar com seu cluster.

Como criar uma sub-rede automaticamente

Os procedimentos a seguir criam um novo cluster nativo de VPC com uma sub-rede gerada automaticamente.

gcloud

Para criar um novo cluster que use endereços IP de alias, execute o seguinte comando:

gcloud container clusters create --enable-ip-alias --create-subnetwork name=my-cluster-subnet

Neste comando, o cluster novo é configurado automaticamente com intervalos de endereços IP e uma sub-rede. Forneça um nome para a sub-rede (neste exemplo, name=my-cluster-subnet) ou uma string vazia ("") para ter um nome gerado automaticamente

Para você mesmo configurar o cluster, execute o comando:

gcloud container clusters create [CLUSTER_NAME] --enable-ip-alias \
--create-subnetwork="" --cluster-ipv4-cidr [RANGE] --services-ipv4-cidr [RANGE] ]

Nesse comando:

  • [CLUSTER_NAME] é o nome que você escolheu para o cluster;
  • A sinalização --create-subnetwork faz com que uma sub-rede do cluster seja criada automaticamente.
  • A sinalização --cluster-ipv4-cidr indica o tamanho e o local do

    intervalo CIDR do cluster. [RANGE] pode ser na forma de [IP address]/[SIZE], como 10.0.0.0/18, ou simplesmente /[SIZE], o que faz com que o endereço IP seja atribuído automaticamente. Se essa sinalização for omitida, um intervalo CIDR será atribuído automaticamente com um tamanho padrão.

  • A sinalização --services-ipv4-cidr indica o tamanho e o local do intervalo CIDR do serviço. As especificações [RANGE] são idênticas a --cluster-ipv4-cidr. O intervalo não pode se sobrepor a --cluster-ip4-cidr e vice-versa. Se essa sinalização for omitida, um intervalo CIDR será atribuído automaticamente com um tamanho padrão.

API

Para criar um cluster nativo de VPC, defina um objeto IPAllocationPolicy no recurso do cluster:

{
  "name": [CLUSTER_NAME],
  "description": [DESCRIPTION],
  ...
  "ipAllocationPolicy": {
    "useIpAliases": true,
    "createSubnetwork": true,
    "subnetworkName": [SUBNET_NAME]
  },
  ...
}

createSubnetwork cria e provisiona automaticamente uma sub-rede para o cluster. subnetworkName é opcional. Se ficar vazio, um nome será escolhido automaticamente para a sub-rede.

Solução de problemas

Nesta seção há orientações para resolver problemas relacionados a clusters nativos de VPC.

Não é possível usar aliases de IP com uma rede legada

Os novos clusters criados com o Console do Google Cloud Platform são nativos de VPC por padrão. No entanto, não é possível criar um cluster nativo de VPC em uma rede legada.

Para criar um cluster em uma rede legada, crie um cluster baseado em rotas.

O recurso "projects/[PROJECT_NAME]/regions/XXX/subnetworks/default" "não está pronto"

Causas possíveis
Há operações paralelas na mesma sub-rede. Por exemplo, outro cluster nativo de VPC está sendo criado ou um intervalo secundário está sendo adicionado ou excluído na sub-rede.
Resolução
Repetir o comando.

Valor inválido para o campo "resource.secondaryIpRanges [1].ipCidrRange": "XXX". IPCidrRange inválido: XXX está em conflito com a sub-rede atual "default" na região "XXX".

Causas possíveis

Outro cluster nativo de VPC está sendo criado ao mesmo tempo e está tentando alocar os mesmos intervalos.

O mesmo intervalo secundário está sendo adicionado à sub-rede.

Resolução

Se esse erro for retornado na criação do cluster quando nenhum intervalo secundário foi especificado, tente executar novamente o comando de criação do cluster.

Não há espaço IP livre suficiente para o pod

Sintomas

O cluster está preso em um estado de provisionamento por um longo período

A criação de cluster retorna um erro do grupo de instâncias gerenciadas (MIG, na sigla em inglês)

Novos nós não podem ser adicionados a um cluster atual

Causas possíveis

O espaço não alocado no intervalo secundário de pods não é grande o suficiente para os nós solicitados no cluster. Por exemplo, se um usuário especificar um intervalo secundário /23 para pods e o usuário solicitar mais de dois nós, o cluster poderá ficar parado no estado de provisionamento. Consulte Observações para escalonamento de clusters para ver orientações sobre o escalonamento adequado de intervalos de endereços IP.

Se esse problema ocorrer durante a criação do cluster, exclua o cluster preso no estado de provisionamento e crie outro com um intervalo secundário que tenha espaço suficiente para o cluster. Por exemplo, se um usuário especificar um intervalo CIDR secundário menor que /24 e o atribuir a um cluster, ele poderá ficar parado no estado de provisionamento.

Observe que uma sub-rede pode ter no máximo 30 intervalos secundários. Além disso, cada cluster nativo de VPC requer pelo menos dois intervalos secundários: um para pods e outro para serviços.

Se esse problema ocorrer durante o reescalonamento do pool de nós, será preciso criar espaço para os novos nós removendo os nós atuais.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine