Como configurar um cluster particular

Nesta página, você aprenderá como criar um cluster particular no Google Kubernetes Engine.

Visão geral

Em um cluster particular, os nós têm apenas endereços IP RFC 1918 internos. Isso garante que as cargas de trabalho sejam isoladas da Internet pública.

Todos os clusters têm um servidor de API do Kubernetes chamado mestre. Os mestres são executados em máquinas virtuais (VMs, na sigla em inglês) em projetos de propriedade do Google. Em um cluster particular, é possível controlar o acesso ao mestre.

Um cluster particular pode usar um balanceador de carga HTTP(S) ou um balanceador de carga de rede para aceitar o tráfego de entrada, ainda que os nós do cluster não tenham endereços IP públicos. Além disso, se você tiver um cluster particular, é possível usar um balanceador de carga interno para que ele aceite o tráfego originado da sua própria rede VPC.

Recursos

Os clusters particulares usam os seguintes recursos do GCP:

Peering de rede VPC
Clusters particulares necessitam do peering de redes VPC. Sua rede VPC contém os nós do cluster. No entanto, o mestre está em uma rede VPC separada dentro de um projeto de propriedade do Google. As duas redes VPC são conectadas por meio do peering de redes VPC. O tráfego entre os nós e o mestre é completamente roteado com o uso de endereços IP internos.
Acesso privado do Google
Nós particulares não têm acesso de saída à Internet porque eles não têm endereços IP externos. O acesso privado do Google fornece aos nós particulares e às respectivas cargas de trabalho acesso de saída limitado a APIs e serviços do Google Cloud Platform, usando a rede privada do Google. Por exemplo, o acesso privado do Google permite que os nós particulares extraiam imagens de contêiner do Google Container Registry e enviem registros ao Stackdriver.

Requisitos

Os clusters particulares têm os seguintes requisitos:

Cluster nativo de VPC
É necessário que um cluster particular seja um cluster nativo de VPC com o recurso de intervalos de IP de alias ativado. Clusters nativos de VPC não são compatíveis com redes legadas.
Kubernetes versão 1.8.14-gke.0 ou posterior
Os nós em um cluster particular precisam executar o Kubernets na versão 1.8.14-gke.0 ou posterior.

Restrições

Clusters particulares têm as seguintes restrições:

  • Não é possível converter um cluster não particular atual em um cluster particular.
  • Não é possível usar um intervalo de IPs de mestres, nós, pods ou serviços de clusters que se sobreponham a 172.17.0.0/16.
  • Excluir o peering VPC entre o mestre e os nós do cluster, suprimir as regras de firewall que permitem o tráfego de entrada do mestre para nós do cluster na porta 10250 e/ou eliminar a rota padrão para o gateway de Internet padrão faz com que o cluster particular pare de funcionar.

Limitações

Clusters particulares têm as seguintes limitações:

  • Cada cluster particular criado usa um peering de redes VPC único. Cada rede VPC faz peering com até 25 outras redes VPC.
  • O tamanho do bloco RFC 1918 do mestre do cluster precisa ser /28.
  • O GKE é capaz de detectar a sobreposição com o bloco de endereços do mestre do cluster, mas não consegue detectar a sobreposição dentro de uma rede VPC compartilhada.

Limitações para clusters regionais

  • Atualmente, não é possível usar um proxy para alcançar o mestre do cluster usando o endereço IP particular dele.

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 código 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 a gcloud para a versão mais recente:
    gcloud components update

Acesso ao mestre

Em um cluster particular, o mestre tem dois endpoints:

  • Endpoint particular: é o endereço IP interno do mestre, atrás de um balanceador de carga interno na rede VPC do mestre. Os nós se comunicam com o mestre usando o endpoint particular. Qualquer VM que esteja na sua rede VPC e na mesma região do seu cluster particular pode usar o endpoint particular.

  • Endpoint público: é o endereço IP externo do mestre. É possível configurar o acesso ao endpoint público. Nos casos mais restritos, não há qualquer acesso a ele. Para reduzir a restrição, autorize que determinados intervalos de endereços acessem o endpoint público. Além disso, é possível remover todas as restrições. Para isso, basta permitir que qualquer pessoa tenha acesso ao endpoint público.

Como determinar os endpoints do cluster

Para determinar os endpoints do cluster, descreva o cluster usando os seguintes comandos:

gcloud container clusters describe [CLUSTER-NAME] \
    --zone=[ZONE] | --region=[REGION] \
    --format="get(privateClusterConfig.privateEndpoint)"
gcloud container clusters describe [CLUSTER-NAME] \
    --zone=[ZONE] | --region=[REGION] \
    --format="get(privateClusterConfig.publicEndpoint)"

em que:

  • [CLUSTER-NAME] é o nome do cluster;
  • [ZONE] é a zona de um cluster zonal e [REGION] é a região de um cluster regional.

Acesso aos endpoints do cluster

Os clusters particulares têm três combinações de configurações para controlar o acesso aos endpoints. A tabela a seguir descreve essas três configurações.

Acesso ao endpoint público desativado Acesso ao endpoint público ativado,
redes mestres autorizadas ativadas
Acesso ao endpoint público ativado,
redes mestres autorizadas desativadas
Segurança Maior nível de restrição de acesso ao mestre. O acesso de cliente ao endpoint público do mestre está bloqueado. O mestre é acessado somente por endereços IP internos. Os endereços IP internos e externos definidos por você têm acesso restrito ao mestre. Qualquer endereço IP tem acesso ao mestre.
Opções de configuração do Console do GCP

Selecione Ativar cluster nativo de VPC.
Selecione Cluster particular.
Desmarque Acessar mestre usando o endereço IP externo.

A opção Ativar redes mestres autorizadas é ativada automaticamente.

Selecione Ativar cluster nativo de VPC.
Selecione Cluster particular.
Selecione Acessar mestre usando o endereço IP externo.
Selecione Ativar redes mestres autorizadas.
Selecione Ativar cluster nativo de VPC.
Selecione Cluster particular.
Selecione Acessar mestre usando o endereço IP externo.
Desmarque Ativar redes mestres autorizadas.
Sinalizações de criação de cluster no gcloud --enable-ip-alias
--enable-private-nodes
--enable-private-endpoint
--enable-master-authorized-networks
--enable-ip-alias
--enable-private-nodes
--enable-master-authorized-networks
--enable-ip-alias
--enable-private-nodes
--no-enable-master-authorized-networks
Comunicação entre nós e mestre

Os nós sempre entram em contato com o mestre usando o endpoint particular.

Redes mestres autorizadas

Necessário para acessar o mestre a partir de endereços IP internos que não sejam nós e pods.

Não é necessário autorizar explicitamente os intervalos de endereços IP internos de nós e pods. Eles estão sempre autorizados a se comunicar com o endpoint particular.

Use --master-authorized-networks para especificar endereços IP internos adicionais que podem acessar o mestre. Não é possível incluir endereços IP externos na lista de redes mestres autorizadas porque o acesso ao endpoint público está desativado.

Necessário para acessar o mestre a partir de endereços IP externos e internos que não sejam nós e pods.

Use --master-authorized-networks para especificar os endereços IP externos e internos, diferentes de nós e pods, que podem acessar o mestre.

Não utilizado.

Se você ativar o acesso ao endpoint público do mestre sem ativar as redes mestres autorizadas, esse acesso não será restrito.

Acesso usando o kubectl

A partir dos nós: sempre usa o endpoint particular. É necessário que o kubectl seja configurado para usar o endpoint particular.

A partir de outras VMs na rede VPC do cluster: outras VMs poderão usar o kubectl para se comunicar com o endpoint particular apenas se estiverem na mesma região do cluster e os respectivos endereços IP internos estiverem incluídos na lista de redes mestres autorizadas.

A partir de endereços IP públicos: nunca.

A partir dos nós: sempre usa o endpoint particular. É necessário que o kubectl seja configurado para usar o endpoint particular.

A partir de outras VMs na rede VPC do cluster: outras VMs poderão usar o kubectl para se comunicar com o endpoint particular apenas se estiverem na mesma região do cluster e os respectivos endereços IP internos estiverem incluídos na lista de redes mestres autorizadas.

A partir de endereços IP públicos: máquinas com endereços IP públicos poderão usar o kubectl para se comunicar com o endpoint público apenas se os respectivos endereços IP públicos estiverem incluídos na lista de redes mestres autorizadas. Isso inclui máquinas fora do GCP e as VMs do GCP com endereços IP externos.

A partir dos nós: sempre usa o endpoint particular. É necessário que o kubectl seja configurado para usar o endpoint particular.

A partir de outras VMs na rede VPC do cluster: outras VMs poderão usar o kubectl para se comunicar com o endpoint particular apenas se estiverem na mesma região do cluster.

A partir de endereços IP públicos: qualquer máquina com um endereço IP público poderá usar o kubectl para se comunicar com o endpoint público. Isso inclui máquinas fora do GCP e as VMs do GCP com endereços IP externos.

Como criar um cluster particular com acesso limitado ao endpoint público

Ao criar um cluster particular, é necessário especificar um intervalo /28 de endereços RFC 1918 que serão usados pelo mestre do cluster. O intervalo que você especificar para o mestre do cluster não pode se sobrepor a qualquer sub-rede na sua rede VPC. Depois de criar o cluster, não é possível alterar o intervalo de endereços do mestre.

Como usar uma sub-rede gerada automaticamente

Nesta seção, você criará um cluster particular chamado private-cluster-0. O GKE gera 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.

gcloud

Execute este comando:

gcloud container clusters create private-cluster-0 \
    --create-subnetwork name=my-subnet-0 \
    --enable-master-authorized-networks \
    --enable-ip-alias \
    --enable-private-nodes \
    --master-ipv4-cidr 172.16.0.0/28 \
    --no-enable-basic-auth \
    --no-issue-client-certificate

em que:

  • --enable-master-authorized-networks especifica que o acesso ao endpoint público é restrito aos intervalos de endereços IP que você autoriza;
  • --create-subnetwork name=my-subnet-0 faz com que o GKE crie automaticamente uma sub-rede chamada my-subnet-0;
  • --enable-ip-alias torna o cluster nativo de VPC;
  • --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 RFC 1918 para o mestre. Essa configuração é permanente para esse cluster.

Console

Siga as etapas abaixo:

  1. Acesse o menu do GKE no Console do Google Cloud Platform.

    Acessar o menu do GKE

  2. Clique em Criar cluster.

  3. Escolha Cluster padrão ou um modelo apropriado para sua carga de trabalho.

  4. Em Nome do cluster, insira my-subnet-0.

  5. Clique em Opções avançadas na parte inferior do menu.

  6. Em Cluster nativo de VPC, marque a caixa de seleção Ativar o cluster nativo de VPC (usando o IP de alias). Deixe o menu suspenso Rede definido como default e o menu suspenso Sub-rede do nó definido como default. Dessa forma, o GKE gera uma sub-rede para o cluster.

  7. Em Segurança de rede, marque a caixa de seleção Cluster particular.

  8. Para criar um mestre que possa ser acessado por intervalos de IP externos autorizados, mantenha marcada a caixa de seleção Acessar mestre usando o endereço IP externo.

  9. Defina Intervalo de IPs do mestre como 172.16.0.0/28.

  10. Mantenha marcada a caixa de seleção “__Ativar redes mestre autorizadas”.

  11. Desmarque a caixa de seleção Ativar painel do Kubernetes.

  12. Desmarque a caixa de seleção Emitir um certificado de cliente.

  13. Clique em Criar.

API

Especifique o campo privateClusterConfig no recurso Cluster da API:

{
  "name": "private-cluster-0",
  ...
  "ipAllocationPolicy": {
    "useIpAliases": true,
    "createSubnetwork": true,
  },
  ...
    "privateClusterConfig" {
      "enablePrivateNodes": boolean # Creates nodes with internal IP addresses only
      "enablePrivateEndpoint": boolean # false creates a cluster master with a publicly-reachable endpoint
      "masterIpv4CidrBlock": string # CIDR block for the cluster master
      "privateEndpoint": string # Output only
      "publicEndpoint": string # Output only
  }
}

A esta altura, os únicos endereços IP que têm acesso ao mestre do cluster são os que estão:

  • no intervalo principal de my-subnet-0;
  • no 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-0 \
    --enable-master-authorized-networks \
    --master-authorized-networks 203.0.113.0/29

Agora, os únicos endereços IP com acesso ao mestre do cluster são os que estão:

  • no intervalo principal de my-subnet-0;
  • no intervalo secundário usado para os pods;
  • nos intervalos autorizados, como 203.0.113.0/29.

Como usar uma sub-rede personalizada

Nesta seção, você criará um cluster particular chamado private-cluster-1. Crie uma rede my-net-1 e uma sub-rede my-subnet-1 com intervalo principal 192.168.0.0/20 para os nós do cluster. A sub-rede tem dois intervalos de endereços secundários: my-pods-1 para endereços IP de pods e my-services-1 para endereços IP de serviços.

gcloud

Criar uma rede

Primeiro, crie uma rede para o cluster. O comando a seguir cria a rede my-net-1:

gcloud compute networks create my-net-1 \
    --subnet-mode custom

Criar uma sub-rede e intervalos secundários

Em seguida, crie a sub-rede my-subnet-1 na rede my-net-1 com os intervalos secundários my-pods-1 e my-services-1 para pods e serviços respectivamente:

gcloud compute networks subnets create my-subnet-1 \
    --network my-net-1\
    --region us-central1 \
    --range 192.168.0.0/20 \
    --secondary-range my-pods-1=10.4.0.0/14,my-services-1=10.0.32.0/20 \
    --enable-private-ip-google-access

Criar um cluster particular

Agora, crie o cluster particular private-cluster-1 usando a rede, a sub-rede e os intervalos secundários criados.

gcloud container clusters create private-cluster-1 \
    --zone us-central1-c \
    --enable-master-authorized-networks \
    --enable-ip-alias \
    --network my-net-1 \
    --subnetwork my-subnet-1 \
    --cluster-secondary-range-name my-pods-1 \
    --services-secondary-range-name my-services-1 \
    --enable-private-nodes \
    --master-ipv4-cidr 172.16.0.16/28 \
    --no-enable-basic-auth \
    --no-issue-client-certificate

Console

Criar uma rede, sub-rede e intervalos secundários

  1. Acesse a página “Redes VPC” no console do GCP.

    Acessar a página “Redes VPC”

  2. Clique em Criar rede VPC.

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

  4. Certifique-se de que o Modo de criação de sub-rede esteja configurado como Personalizado.

  5. Em Nova sub-rede, em Nome, insira my-subnet-1.

  6. No menu suspenso Região, selecione a região desejada.

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

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

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

  10. Em Acesso privado do Google, clique em Ativar.

  11. Clique em Concluído.

  12. Clique em Criar.

Criar um cluster particular

Crie um cluster particular que usa a sub-rede:

  1. Acesse o menu do GKE no console do GCP.

    Acessar o menu do GKE

  2. Clique em Criar cluster.

  3. Escolha Cluster padrão ou um modelo apropriado para sua carga de trabalho.

  4. Em Nome do cluster, insira private-cluster-1.

  5. Clique em Opções avançadas na parte inferior do menu.

  6. Em Cluster nativo de VPC, marque a caixa de seleção Ativar o cluster nativo de VPC (usando o IP de alias).

  7. No menu suspenso Rede, selecione my-net-1.

  8. No menu suspenso Sub-rede de nós, selecione my-subnet-1.

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

  10. No menu suspenso Intervalo CIDR secundário do pod, selecione my-pods-1.

  11. No menu suspenso Intervalo CIDR secundário dos serviços, selecione my-services-1.

  12. Em Segurança da rede, selecione a caixa de seleção Cluster particular.

  13. Defina Intervalo de IPs do mestre como 172.16.0.16/28.

  14. Mantenha marcada a caixa de seleção “__Ativar redes mestre autorizadas”.

  15. Desmarque a caixa de seleção Ativar painel do Kubernetes.

  16. Desmarque a caixa de seleção Emitir um certificado de cliente.

  17. Clique em Criar.

A esta altura, os únicos endereços IP que têm acesso ao mestre do cluster são os que estão:

  • no intervalo principal de my-subnet-1;
  • no intervalo secundário de my-pods-1.

Imagine que você tem um grupo de máquinas fora de my-net-1 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

A esta altura, os únicos endereços IP que têm acesso ao mestre do cluster são os que estão:

  • no intervalo principal de my-subnet-1;
  • no intervalo secundário de my-pods-1;
  • nos intervalos autorizados, como 203.0.113.0/29.

Como usar o Cloud Shell para acessar um cluster particular

O cluster particular criado no exercício anterior, private-cluster-1, tem um endpoint público e redes mestres autorizadas ativadas. Se você quiser usar o Cloud Shell para acessar o cluster, é necessário adicionar o endereço IP público do seu Cloud Shell à lista de redes mestres autorizadas do cluster.

Na janela de linha de comando do seu Cloud Shell, use dig para encontrar o endereço IP externo dele:

dig +short myip.opendns.com @resolver1.opendns.com

Adicione o endereço externo do seu Cloud Shell à lista do de redes mestres autorizadas do cluster:

gcloud container clusters update private-cluster-1 \
    --zone us-central1-c \
    --enable-master-authorized-networks \
    --master-authorized-networks [EXISTING_AUTH_NETS],[SHELL_IP]/32

em que:

  • [EXISTING_AUTH_NETS] é a lista atual de redes mestres autorizadas;
  • [SHELL_IP] é o endereço IP externo do seu Cloud Shell.

Receba as credenciais para usar kubectl e acessar o cluster:

gcloud container clusters get-credentials private-cluster-1 \
    --zone us-central1-a \
    --project [PROJECT_ID]

em que [PROJECT_ID] é o código do projeto.

Agora, é possível usar kubectl no Cloud Shell para acessar o cluster particular. Por exemplo:

kubectl get nodes

Como criar um cluster particular sem acesso de cliente ao endpoint público

Nesta seção, você criará um cluster particular com nós particulares e sem acesso ao endpoint público. O mestre do cluster poderá ser acessado apenas de dentro da sua rede VPC. De nenhuma forma será possível acessar o mestre usando um endereço externo à sua rede VPC.

gcloud

Execute este comando:

gcloud container clusters create private-cluster-2 \
    --create-subnetwork name=my-subnet-2 \
    --enable-master-authorized-networks \
    --enable-ip-alias \
    --enable-private-nodes \
    --enable-private-endpoint \
    --master-ipv4-cidr 172.16.0.32/28 \
    --no-enable-basic-auth \
    --no-issue-client-certificate

em que:

  • --enable-master-authorized-networks especifica que o acesso ao endpoint público é restrito aos intervalos de endereços IP que você autoriza;
  • --create-subnetwork name=my-subnet-2 faz com que o GKE crie automaticamente uma sub-rede chamada my-subnet-2;
  • --enable-ip-alias torna o cluster nativo de VPC;
  • --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 RFC 1918 para o mestre. Essa configuração é permanente para esse cluster.

Console

Siga as etapas abaixo:

  1. Acesse o menu do GKE no Console do Google Cloud Platform.

    Acessar o menu do GKE

  2. Clique em Criar cluster.

  3. Escolha Cluster padrão ou um modelo apropriado para sua carga de trabalho.

  4. Em Nome do cluster, insira my-subnet-2.

  5. Clique em Opções avançadas na parte inferior do menu.

  6. Em Cluster nativo de VPC, marque a caixa de seleção Ativar o cluster nativo de VPC (usando o IP de alias). Deixe o menu suspenso Rede definido como default e o menu suspenso Sub-rede do nó definido como default. Dessa forma, o GKE gera uma sub-rede para o cluster.

  7. Em Segurança de rede, marque a caixa de seleção Cluster particular.

  8. Desmarque a caixa de seleção Acessar mestre usando o endereço IP externo. Observe que “__Ativar redes mestre autorizadas”.

  9. Defina Intervalo de IPs do mestre como 172.16.0.32/28.

  10. A caixa de seleção “__Ativar redes mestre autorizadas” é marcada automaticamente.

  11. Desmarque a caixa de seleção Ativar painel do Kubernetes.

  12. Desmarque a caixa de seleção Emitir um certificado de cliente.

  13. Clique em Criar.

API

Para criar um cluster com um mestre acessível publicamente, especifique o campo enablePrivateEndpoint: true no recurso privateClusterConfig.

A esta altura, os únicos endereços IP que têm acesso ao mestre do cluster são os que estão:

  • no intervalo principal de my-subnet-2;
  • no intervalo secundário usado para os pods.

Por exemplo, imagine que você criou uma VM no intervalo principal de my-subnet-2. Então, nessa VM, seria possível configurar o kubectl para usar o endereço IP interno do mestre.

Se você quiser acessar o mestre do cluster com um endereço externo a my-subnet-2, precisará autorizar pelo menos um intervalo de endereços para ter acesso ao endpoint particular.

Imagine que você tenha uma VM na rede padrão, na mesma região do seu cluster, mas não na my-subnet-2.

Exemplo:

  • my-subnet-2: 10.0.0.0/22
  • intervalo secundário de pods: 10.52.0.0/14
  • endereço da VM: 10.128.0.3

Para autorizar a VM a acessar o mestre, use este comando:

gcloud container clusters update private-cluster-2 \
    --enable-master-authorized-networks \
    --master-authorized-networks 10.128.0.3/32

Como criar um cluster particular em uma rede VPC compartilhada

Para aprender a criar um cluster particular em uma rede VPC compartilhada, consulte a documentação de VPC compartilhada.

Observações sobre as redes mestres autorizadas

As redes autorizadas têm as seguintes limitações:

  • É possível adicionar até 20 redes autorizadas (blocos CIDR na lista de permissões) em um projeto.

Para mais informações, consulte Adicionar uma rede autorizada a um cluster.

Confirmar que os nós não têm IPs externos

Depois de criar um cluster particular, é necessário confirmar que os nós dele não têm endereços IP externos.

gcloud

Para verificar se os nós do cluster não têm endereços IP externos, execute o seguinte comando:

kubectl get nodes --output wide

A coluna EXTERNAL-IP da saída está vazia:

STATUS ... VERSION   EXTERNAL-IP  OS-IMAGE ...
Ready      v.8.7-gke.1                 Container-Optimized OS from Google
Ready      v1.8.7-gke.1                Container-Optimized OS from Google
Ready      v1.8.7-gke.1                Container-Optimized OS from Google

Console

Para verificar se os nós do cluster não têm endereços IP externos, siga estas etapas:

  1. Acesse o menu do GKE no console do GCP.

    Acessar o menu do GKE

  2. Na lista de clusters, clique no cluster desejado.

  3. Em Pools de nós, clique no nome do grupo de instâncias. Por exemplo, gke-private-cluster-0-default-pool-5c5add1f-grp.

  4. Na lista de instâncias, confirme que elas não têm endereços IP externos.

Como visualizar a sub-rede do cluster e os intervalos de endereços secundários

Depois de criar um cluster particular, você pode exibir os intervalos de endereços de sub-rede e secundários que você ou o GKE provisionaram para o cluster.

gcloud

Listar todas as sub-redes

Para listar as sub-redes na rede na rede do cluster, execute o seguinte comando:

gcloud compute networks subnets list --network [NETWORK]

[NETWORK] é a rede do cluster particular. Se você criou o cluster com uma sub-rede criada automaticamente, use o default.

Na saída do comando, localize o nome da sub-rede do cluster.

Visualizar sub-rede do cluster

Receba informações sobre a sub-rede criada automaticamente:

gcloud compute networks subnets describe [SUBNET_NAME]

[SUBNET_NAME] é o nome da sub-rede.

A saída mostra o intervalo de endereço principal para nós (o primeiro campo ipCidrRange) e os intervalos secundários para pods e serviços (em secondaryIpRanges):

...
ipCidrRange: 10.0.0.0/22
kind: compute#subnetwork
name: gke-private-cluster-1-subnet-163e3c97
...
privateIpGoogleAccess: true
...
secondaryIpRanges:
- ipCidrRange: 10.40.0.0/14
  rangeName: gke-private-cluster-1-pods-163e3c97
- ipCidrRange: 10.0.16.0/20
  rangeName: gke-private-cluster-1-services-163e3c97
...

Console

  1. Acesse a página “Redes VPC” no console do GCP.

    Acessar a página “Redes VPC”

  2. Clique no nome da sub-rede. Por exemplo, gke-private-cluster-0-subnet-163e3c97.

  3. Em Intervalo de endereços IP, veja o intervalo de endereços principal da sub-rede. Esse é o intervalo usado para nós.

  4. Em Intervalos de IP secundários, veja o intervalo de endereços IP para pods e o intervalo para serviços.

Como ver os endpoints de um cluster particular

É possível ver os endpoints do cluster particular usando a ferramenta de linha de comando gcloud ou o Console do GCP.

gcloud

Execute este comando:

gcloud container clusters describe [CLUSTER_NAME]

A saída mostra tanto o endpoint particular quanto o público:

...
privateClusterConfig:
enablePrivateEndpoint: true
enablePrivateNodes: true
masterIpv4CidrBlock: 172.16.0.32/28
privateEndpoint: 172.16.0.34
publicEndpoint: 35.239.154.67

Console

Siga as etapas abaixo:

  1. Acesse o menu do GKE no console do GCP.

    Acessar o menu do GKE

  2. Na lista, clique no cluster desejado.

  3. Na guia Detalhes, em Cluster, procure o campo Endpoint.

Como extrair imagens de contêiner de um registro de imagem

Em um cluster particular, o ambiente de execução do contêiner pode extrair imagens do Container Registry. Não é possível extrair imagens de qualquer outro registro de imagem de contêiner na Internet. Isso ocorre porque os nós em um cluster particular não têm endereços IP externos. Portanto, por padrão, eles não podem se comunicar com serviços fora da rede do Google.

Os nós de um cluster particular poderão se comunicar com os serviços do Google, como o Container Registry, se estiverem em uma sub-rede com o acesso privado do Google ativado.

Os comandos a seguir criam uma implantação que extrai uma imagem de amostra de um repositório do Container Registry pertencente ao Google:

kubectl run hello-deployment --image gcr.io/google-samples/hello-app:2.0

Outras configurações de cluster particular

Além das configurações anteriores, você pode executar clusters particulares com as seguintes configurações.

Como conceder aos nós particulares acesso à Internet de saída

Nós particulares não têm acesso de saída à Internet porque eles não têm endereços IP externos. Se quiser fornecer acesso de saída à Internet para seus nós particulares, use o Cloud NAT ou gerencie seu próprio gateway NAT.

Como executar um cluster particular com proxies de rede para o respectivo mestre

Você pode criar clusters particulares com proxies de rede, para que o mestre do cluster fique inacessível de fora de sua rede, exceto por meio de um proxy que você cria e hospeda em um espaço IP particular.

Para saber mais, consulte Como criar clusters particulares do Google Kubernetes Engine com proxies de rede para acesso externo.

Como adicionar regras de firewall para casos de uso específicos

Por padrão, as regras de firewall restringem o mestre do cluster a apenas iniciar conexões TCP com seus nós 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. Por exemplo, no Kubernetes 1.9 e versões mais antigas, kubectl top acessa heapster, que precisa de uma regra de firewall para permitir conexões TCP na porta 8080. Para conceder esse acesso, adicione regras de firewall.

Veja nas seções a seguir como adicionar uma regra de firewall a um cluster particular.

Ver o bloco CIDR do mestre do cluster

Você precisa do bloco CIDR do mestre do cluster para adicionar uma regra de firewall.

gcloud

Execute este comando:

gcloud container clusters describe [CLUSTER_NAME]

Na saída do comando, anote o valor no campo masterIpv4CidrBlock.

Console

  1. Acesse o menu do GKE no console do GCP.

    Acessar o menu do GKE

  2. Selecione o cluster desejado.

Na guia Detalhes, em Cluster, anote o valor no campo Intervalo de endereço principal.

Ver as regras de firewall existentes

É necessário especificar o destino (neste caso, os nós de destino) que as regras de firewall atual do cluster usam.

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.

Console

Siga as etapas abaixo:

  1. Acesse o menu "Regras de firewall" no console do GCP.

    Acessar o menu "Regras de firewall"

  2. Preencha a caixa Filtrar recursos com gke-[CLUSTER_NAME].

Nos resultados, anote o valor no campo Destinos.

Adicionar uma regra de firewall

gcloud

Execute este comando:

gcloud compute firewall-rules create [FIREWALL_RULE_NAME] \
    --action ALLOW \
    --direction INGRESS \
    --source-ranges [MASTER_CIDR_BLOCK] \
    --rules [PROTOCOL]:[PORT] \
    --target-tags [TARGET]

em que:

  • [FIREWALL_RULE_NAME] é o nome escolhido para a regra de firewall;
  • [MASTER_CIDR_BLOCK] é o bloco CIDR do mestre do cluster coletado anteriormente;
  • [PROTOCOL]:[PORT] é a porta desejada e o respectivo protocolo tcp ou udp;
  • [TARGET] é o valor-alvo que você coletou anteriormente.

Console

Siga as etapas abaixo:

  1. Acesse o menu "Regras de firewall" no console do GCP.

    Acessar o menu "Regras de firewall"

  2. Clique em Criar regra de firewall.

  3. Preencha a caixa Nome com o nome desejado para a regra de firewall.

  4. No menu suspenso Rede, selecione a rede desejada.

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

  6. Em Ação em relevância, clique em Permitir.

  7. No menu suspenso Destino, selecione Tags de destino especificado.

  8. Preencha a caixa Tags de destino com o valor de destino coletado anteriormente.

  9. No menu suspenso Filtro de origem, selecione Intervalos de IP.

  10. Preencha a caixa Intervalos de IP de origem com o bloco CIDR do mestre do cluster coletado anteriormente.

  11. Em Protocolos e portas, clique em Protocolos e portas especificados, marque a caixa do protocolo pertinente (TCP ou UDP) e preencha a caixa com a porta desejada.

  12. Clique em Criar.

Como fazer a 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

gcloud

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

Console

  1. Acesse o menu do GKE no console do GCP.

    Acessar o menu do GKE

  2. Selecione cada cluster.

  3. Clique em Excluir.

Excluir a rede

gcloud

gcloud compute networks delete net-0

Console

  1. Acesse a página de redes VPC no console do GCP.

    Acessar a página “Redes VPC”

  2. Na lista de redes, em net-0, clique no ícone da lixeira.

  3. Ao lado de cada sub-rede, clique no ícone da lixeira.

Como resolver problemas

Veja nas seções a seguir como resolver problemas comuns relacionados a clusters particulares.

Cluster se sobrepõe a um peering ativo

Sintomas
A tentativa de criar um cluster particular retorna um erro, como Google Compute Engine: An IP range in the peer network overlaps with an IP range in an active peer of the local network..
Causas possíveis
Você escolheu um CIDR mestre sobreposto.
Resolução
Exclua e recrie o cluster usando um CIDR mestre diferente.

Não é possível alcançar o mestre

Sintomas
Depois de criar um cluster particular, a tentativa de executar comandos kubectl no cluster retorna um erro, como Unable to connect to the server: dial tcp [IP_ADDRESS]: connect: connection timed out ou Unable to connect to the server: dial tcp [IP_ADDRESS]: i/o timeout.
Causas possíveis
kubectl é incapaz de se comunicar com o mestre do cluster.
Resolução
Adicione redes autorizadas ao cluster para colocar na lista de permissões os endereços IP da sua rede.

Não é possível criar o cluster devido à sinalização omitida

Sintomas
gcloud container clusters create retorna um erro, como Cannot specify --enable-private-endpoint without --enable-private-nodes.
Causas possíveis
Você não especificou uma sinalização necessária.
Resolução
Assegure-se de especificar as sinalizações necessárias. Não é possível ativar um endpoint particular para o mestre do cluster sem ativar também os nós particulares.

Não é possível criar o cluster devido à sobreposição do bloco CIDR IPv4 mestre

Sintomas
gcloud container clusters create retorna um erro, como The given master_ipv4_cidr 10.128.0.0/28 overlaps with an existing network 10.128.0.0/20.
Causas possíveis
Você especificou um bloco CIDR mestre que se sobrepõe a uma sub-rede na VPC.
Resolução
Especifique um bloco CIDR para --master-ipv4-cidr que não se sobreponha a uma sub-rede.

Não é possível criar sub-rede

Sintomas
A tentativa de criar um cluster particular com uma sub-rede automática ou uma sub-rede personalizada resulta no seguinte erro: An IP range in the peer network overlaps with an IP range in one of the active peers of the local network.
Causas possíveis
O intervalo CIDR mestre especificado se sobrepõe a outro intervalo de IPs no cluster. Isso também pode ocorrer se você tiver excluído recentemente um cluster particular e estiver tentando criar um cluster particular novo usando o mesmo CIDR mestre.
Resolução
Tente usar um intervalo CIDR diferente.

Não é possível extrair a imagem do Hub Docker público

Sintomas
Um pod em execução no cluster exibe um aviso em kubectl describe, como Failed to pull image: rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Causas possíveis
Os nós no cluster particular não têm acesso de saída à Internet pública. Eles têm acesso limitado a APIs e serviços do Google, incluindo o Container Registry.
Resolução
Para usar imagens do Docker Hub em um cluster particular, configure o daemon do Docker para buscar imagens do espelho do Docker Hub do Container Registry. Em seguida, ele buscará imagens do espelho, em vez de diretamente do Docker Hub.

A seguir

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

Enviar comentários sobre…

Documentação do Kubernetes Engine