Como criar clusters nativos de VPC usando endereços IP de alias

Esta página explica como criar clusters nativos de VPC no Google Kubernetes Engine usando endereços IP de alias. Para informações gerais sobre a rede do GKE, acesse a Visão geral da rede.

Visão geral

Com os endereços IP de alias, os clusters do GKE podem alocar endereços IP de um bloco do CIDR conhecido pelo Google Cloud Platform (GCP). Isso torna seu cluster mais escalonável e permite que ele interaja melhor com outros produtos e entidades do GCP.

Vantagens

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 endereços IP de pods são reservados dentro da rede com antecedência, o que evita conflitos com outros recursos de computação.
  • 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

  • No momento, não é possível migrar um cluster nativo de VPC para um que use rotas avançadas.
  • No momento, não é possível migrar um cluster que usa rotas para o encaminhamento do pod para um cluster que usa endereços IP de alias.
  • Não é possível usar redes legadas com clusters nativos de VPC.
  • Endereços IP de cluster para serviços internos permanecem 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

Prepare-se para a tarefa tomando as seguintes medidas:

  • 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 de computação padrão:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Se você estiver trabalhando com clusters regionais, defina a região de computação padrão:
    gcloud config set compute/region [COMPUTE_REGION]
  • Atualize o gcloud para a versão mais recente:
    gcloud components update

Intervalos secundários

Os clusters criados com endereços IP de alias usam dois intervalos secundários para alocar endereços IP em sua VPC:

  • Um intervalo que aloca endereços IP de alias para endereços IP de pods.
  • Um intervalo que reserva espaço para serviços do ClusterIP para impedir a reutilização de IPs de serviço na sua VPC.

O esquema de alocação de endereços IP de alias é diferente do esquema usado com rotas avançadas. Com rotas avançadas, um intervalo CIDR é alocado para todo o cluster, e o intervalo é dividido entre pods e serviços (o último /20 do intervalo). Com os endereços IP de alias, o intervalo de serviços é um intervalo CIDR distinto fora do intervalo do cluster.

Gerenciamento de intervalos secundários

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

Gerenciado pelo GKE

É possível ter o plano de controle gerenciando os intervalos secundários. Esse é o modo padrão usado quando você cria um cluster com IPs de alias e quando usa as sinalizações de máscara de rede/intervalos CIDR (--cluster-ipv4-cidr e --services-ipv4-cidr).

É possível personalizar o tamanho e o posicionamento do intervalo secundário nomeando explicitamente um intervalo CIDR (por exemplo, 10.0.0.0/16) ou definindo um tamanho de máscara de rede (como /16). Quando você cria ou exclui um cluster dessa maneira, o GKE cria ou exclui automaticamente os intervalos secundários na sua VPC.

Gerenciado pelo usuário

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

Você precisa criar manualmente intervalos secundários para clusters em redes VPC compartilhadas. Com a VPC compartilhada, os usuários que criam clusters do GKE não podem criar intervalos secundários com as credenciais de locatário deles. O proprietário do projeto host cria os intervalos secundários e os transmite ao locatário para uso com o cluster.

Considerações para escalonamento de clusters

O número máximo de nós e serviços para um 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ó aloca atualmente um bloco /24 (2(32-24) = 28 = 256) de endereços IP de pods. Esses endereços IP dos pods são recebidos do intervalo secundário associado para pods. O intervalo de pods, determinado pelas sinalizações --cluster-ipv4-cidr ou --cluster-secondary-range-name, precisa ser pelo menos grande o suficiente para acomodar (número total de nós × 256) endereços IP.

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 de /14 de endereços IP resulta em 2(32-14) = 218 ≈ 262.000 endereços IP.

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. Defina os intervalos escolhidos usando as sinalizações --services-ipv4-cidr ou --services-secondary-range-name.

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 de endereços IP com tamanho /20 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 do nó falha quando não há mais endereços IP disponíveis no intervalo de endereços de pods (pelo menos 256 para uma criação de nó adicional) com o erro Instance [instance name] creation failed: IP space of [cluster subnet] is exhausted.

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 = 2 16 = 65.536 endereços IP alocados para serviços

Como criar um cluster com endereços IP de alias

É possível criar um cluster nativo de VPC com endereços IP de alias usando o Console do Google Cloud Platform.

Para otimizar o uso do espaço de endereços IP do seu cluster, configure o número máximo de pods que podem ser atribuídos a um nó.

a ferramenta de linha de comando gcloud ou a API do GKE.

gcloud

Para criar o cluster com endereços IP de alias, execute o seguinte comando, em que [CLUSTER_NAME] é o nome escolhido para o cluster:

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

Console

Para criar um cluster com endereços IP de alias, execute as seguintes etapas:

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

    Ir para 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 Nativo de VPC, selecione Ativar nativo de VPC (usando IP do alias).

  5. Clique em Criar.

API

Para criar um cluster com endereços IP de alias, defina um objeto IPAllocationPolicy no recurso de cluster:

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

  },
  ...
}

em que:

  • "useIpAliases": true cria o cluster com endereços IP de alias;
  • "clusterIpv4CidrBlock" é o tamanho/local do intervalo CIDR para pods. Determina o tamanho do intervalo secundário de pods e pode ser IP/tamanho na notação CIDR (como 10.0.0.0/14) ou /tamanho (como /14). Um espaço vazio com o tamanho determinado é escolhido no espaço disponível na VPC. Se deixado em branco, um intervalo válido é 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 para pods. O intervalo secundário já precisa existir e pertencer à 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 ver mais exemplos de cluster, consulte Exemplos.

Como verificar os intervalos secundários do cluster

Depois de criar um cluster com endereços IP de alias, é preciso verificar os intervalos do cluster.

gcloud

Para verificar o cluster, execute o seguinte comando:

gcloud container clusters describe [CLUSTER_NAME]

Na resposta ao comando, procure no campo ipAllocationPolicy:

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

Console

Para verificar o cluster, siga as seguintes etapas:

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

    Acessar o menu do Google Kubernetes Engine

  2. Selecione o cluster pretendido.

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 para serviços

Exemplos

As seções a seguir fornecem exemplos para usar endereços IP de alias.

Como criar um cluster com intervalos de endereços IP 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.

    Ir para 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 Nativo de VPC, selecione Ativar nativo de VPC (usando IP do alias).

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

  6. Preencha o campo Intervalo de endereços de 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

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

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

Como criar um cluster com intervalos secundários atuais

Para ver detalhes sobre como criar intervalos secundários para endereços IP de alias, consulte Visão geral sobre intervalos de endereços IP de alias.

Você precisa criar dois intervalos secundários na sub-rede, um denominado my-pods para pods e outro denominado 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 o seguinte 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.

    Ir para 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 Nativo de VPC, selecione Ativar nativo de VPC (usando IP do alias).

  5. Defina Criar automaticamente intervalos secundários 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 de pods e o Intervalo secundário de serviços para usar com seu cluster.

Como criar uma sub-rede automaticamente

Os procedimentos a seguir criam um novo cluster de IP de alias 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. É possível fornecer um nome para a sub-rede (neste exemplo, name=my-cluster-subnet) ou fornecer uma string vazia ("") para que o nome seja gerado automaticamente.

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

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 --enable-ip-alias indica que o cluster usa endereços IP de alias;
  • a sinalização --create-subnetwork faz com que uma sub-rede seja criada automaticamente para o cluster;
  • a sinalização opcional --cluster-ipv4-cidr indica o tamanho e o local do intervalo CIDR do cluster. [RANGE] pode estar 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 tamanhos padrão;
  • a sinalização opcional --services-ipv4-cidr indica o tamanho e o local do intervalo CIDR do serviço. As especificações de [RANGE] são idênticas às de --cluster-ipv4-cidr. O intervalo não pode sobrepor-se a --cluster-ip4-cidr e vice-versa. Se essa sinalização for omitida, um intervalo CIDR será atribuído automaticamente com tamanhos padrão.

API

Para criar um cluster com endereços IP de alias, defina um objeto IPAllocationPolicy no recurso de cluster:

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

"useIpAliases": true cria o cluster com endereços IP do alias. 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

Esta seção fornece orientações para resolver problemas relacionados a endereços IP de alias.

Não há espaço de endereços IP suficiente para o pod

Sintomas

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

A criação de cluster retorna um erro do grupo de instâncias gerenciadas (MIG)

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

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 Consideraçõ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.

Uma sub-rede pode ter no máximo cinco 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