Configure clusters com a VPC partilhada

Este guia mostra como criar dois clusters do Google Kubernetes Engine (GKE) em projetos separados que usam uma VPC partilhada. Para obter informações gerais sobre as redes do GKE, visite a Vista geral da rede.

Os exemplos neste guia configuram a infraestrutura para uma aplicação Web de dois níveis, conforme descrito na vista geral da VPC partilhada.

Por que motivo deve usar a VPC partilhada com o GKE

Com a VPC partilhada, designa um projeto como o projeto anfitrião e pode anexar outros projetos, denominados projetos de serviço, ao projeto anfitrião. Cria redes, sub-redes, intervalos de endereços secundários, regras de firewall e outros recursos de rede no projeto anfitrião. Em seguida, partilha as sub-redes selecionadas, incluindo intervalos secundários, com os projetos de serviço. Os componentes executados num projeto de serviço podem usar a VPC partilhada para comunicar com os componentes executados nos outros projetos de serviço.

Pode usar a VPC partilhada com clusters do Autopilot e com clusters Standard regionais e zonais.

Os clusters padrão que usam a VPC partilhada não podem usar redes antigas e têm de ter a funcionalidade de encaminhamento de tráfego nativa da VPC ativada. Os clusters do Autopilot ativam sempre o encaminhamento de tráfego nativo de VPC.

Pode configurar a VPC partilhada quando cria um novo cluster. O GKE não suporta a conversão de clusters existentes para o modelo de VPC partilhada.

Com a VPC partilhada, aplicam-se determinadas quotas e limites. Por exemplo, existe uma quota para o número de redes num projeto e um limite para o número de projetos de serviço que podem ser anexados a um projeto anfitrião. Para ver detalhes, consulte o artigo Quotas e limites.

Antes de começar

Antes de começar a configurar um cluster com a VPC partilhada:

Antes de realizar os exercícios neste guia:

  • Escolha um dos seus projetos para ser o projeto anfitrião.
  • Escolha dois dos seus projetos para serem projetos de serviço.

Cada projeto tem um nome, um ID e um número. Em alguns casos, o nome e o ID são iguais. Este guia usa os seguintes nomes amigáveis e marcadores de posição para se referir aos seus projetos:

Nome simples Marcador de posição do ID do projeto
Marcador de posição do número do projeto
O seu projeto anfitrião HOST_PROJECT_ID HOST_PROJECT_NUM
O seu primeiro projeto de serviço SERVICE_PROJECT_1_ID SERVICE_PROJECT_1_NUM
O seu segundo projeto de serviço SERVICE_PROJECT_2_ID SERVICE_PROJECT_2_NUM

Encontre os IDs e os números dos seus projetos

Pode encontrar o ID e os números do projeto através da CLI gcloud ou da Trusted Cloud consola.

Consola

  1. Aceda à página Início da Trusted Cloud consola.

    Aceda à página inicial

  2. No seletor de projetos, selecione o projeto que escolheu para ser o projeto anfitrião.

  3. Em Informações do projeto, pode ver o nome do projeto, o ID do projeto e o número do projeto. Anote o ID e o número para mais tarde.

  4. Faça o mesmo para cada um dos projetos que escolheu para serem projetos de serviços.

gcloud

Apresente uma lista dos seus projetos com o seguinte comando:

gcloud projects list

A saída mostra os nomes, os IDs e os números dos seus projetos. Anote o ID e o número para mais tarde:

PROJECT_ID        NAME        PROJECT_NUMBER
host-123          host        1027xxxxxxxx
srv-1-456         srv-1       4964xxxxxxxx
srv-2-789         srv-2       4559xxxxxxxx

Ative a API GKE nos seus projetos

Antes de continuar com os exercícios neste guia, certifique-se de que a API GKE está ativada nos três projetos. A ativação da API num projeto cria uma conta de serviço do GKE para o projeto. Para realizar as restantes tarefas neste guia, cada um dos seus projetos tem de ter uma conta de serviço do GKE.

Pode ativar a API GKE através da Trusted Cloud consola ou da CLI Google Cloud.

Consola

  1. Aceda à página APIs e serviços na Trusted Cloud consola.

    Aceda a APIs e serviços

  2. No seletor de projetos, selecione o projeto que escolheu para ser o projeto anfitrião.

  3. Se Kubernetes Engine API estiver na lista de APIs, já está ativada e não tem de fazer nada. Se não estiver na lista, clique em Ativar APIs e serviços. Pesquise Kubernetes Engine API. Clique no cartão API Kubernetes Engine e, de seguida, clique em Ativar.

  4. Repita estes passos para cada projeto que escolheu para ser um projeto de serviço. Cada operação pode demorar algum tempo a ser concluída.

gcloud

Ative a API GKE para os três projetos. Cada operação pode demorar algum tempo a ser concluída:

gcloud services enable container.googleapis.com --project HOST_PROJECT_ID
gcloud services enable container.googleapis.com --project SERVICE_PROJECT_1_ID
gcloud services enable container.googleapis.com --project SERVICE_PROJECT_2_ID

Crie uma rede e duas sub-redes

Nesta secção, vai realizar as seguintes tarefas:

  1. No projeto anfitrião, crie uma rede denominada shared-net.
  2. Crie duas sub-redes com os nomes tier-1 e tier-2.
  3. Para cada sub-rede, crie dois intervalos de endereços secundários: um para os serviços e um para os pods.

Consola

  1. Aceda à página Redes VPC na Trusted Cloud consola.

    Aceda a redes de VPC

  2. No seletor de projetos, selecione o projeto anfitrião.

  3. Clique em Criar rede VPC.

  4. Em Nome, introduza shared-net.

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

  6. Na caixa Nova sub-rede, em Nome, introduza tier-1.

  7. Em Região, selecione uma região.

  8. Em Tipo de pilha de IP, selecione IPv4 (pilha única).

  9. Para o intervalo de IPv4, introduza 10.0.4.0/22.

  10. Clique em Criar intervalo IPv4 secundário. Em Nome do intervalo da sub-rede, introduza tier-1-services e, em Intervalo IPv4 secundário, introduza 10.0.32.0/20.

  11. Clique em Adicionar intervalo de IP. Em Nome do intervalo da sub-rede, introduza tier-1-pods e, em Intervalo IPv4 secundário, introduza 10.4.0.0/14.

  12. Clique em Adicionar sub-rede.

  13. Em Nome, introduza tier-2.

  14. Para Região, selecione a mesma região que selecionou para a sub-rede anterior.

  15. Para o intervalo de IPv4, introduza 172.16.4.0/22.

  16. Clique em Criar intervalo IPv4 secundário. Em Nome do intervalo da sub-rede, introduza tier-2-services e, em Intervalo IPv4 secundário, introduza 172.16.16.0/20.

  17. Clique em Adicionar intervalo de IP. Em Nome do intervalo da sub-rede, introduza tier-2-pods e, em Intervalo IPv4 secundário, introduza 172.20.0.0/14.

  18. Clique em Criar.

gcloud

No projeto anfitrião, crie uma rede com o nome shared-net:

gcloud compute networks create shared-net \
    --subnet-mode custom \
    --project HOST_PROJECT_ID

Na nova rede, crie uma sub-rede com o nome tier-1:

gcloud compute networks subnets create tier-1 \
    --project HOST_PROJECT_ID \
    --network shared-net \
    --range 10.0.4.0/22 \
    --region COMPUTE_REGION \
    --secondary-range tier-1-services=10.0.32.0/20,tier-1-pods=10.4.0.0/14

Crie outra sub-rede com o nome tier-2:

gcloud compute networks subnets create tier-2 \
    --project HOST_PROJECT_ID \
    --network shared-net \
    --range 172.16.4.0/22 \
    --region COMPUTE_REGION \
    --secondary-range tier-2-services=172.16.16.0/20,tier-2-pods=172.20.0.0/14

Substitua COMPUTE_REGION por uma região do Compute Engine.

Determine os nomes das contas de serviço nos seus projetos de serviço

Tem dois projetos de serviço, cada um com várias contas de serviço. Esta secção refere-se às suas contas de serviço do GKE e às contas de serviço das APIs Google. Precisa dos nomes destas contas de serviço para a secção seguinte.

A tabela seguinte indica os nomes das contas de serviço das APIs GKE e Google nos seus dois projetos de serviço:

Tipo de conta de serviço Nome da conta de serviço
GKE service-SERVICE_PROJECT_1_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com
service-SERVICE_PROJECT_2_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com
APIs Google SERVICE_PROJECT_1_NUM@cloudservices.s3ns-system.iam.gserviceaccount.com
SERVICE_PROJECT_2_NUM@cloudservices.s3ns-system.iam.gserviceaccount.com

Ative a VPC partilhada e conceda funções

Para realizar as tarefas nesta secção, certifique-se de que a sua organização definiu uma função de administrador da VPC partilhada.

Nesta secção, vai realizar as seguintes tarefas:

  1. No projeto anfitrião, ative a VPC partilhada.
  2. Anexe os dois projetos de serviço ao projeto anfitrião.
  3. Conceda as funções de IAM adequadas às contas de serviço que pertencem aos seus projetos de serviço:
    • No seu primeiro projeto de serviço, conceda a duas contas de serviço a função de Compute Network Usertier-1 na sub-rede do seu projeto anfitrião.
    • No segundo projeto de serviço, conceda a duas contas de serviço a função de Compute Network User na sub-rede tier-2 do projeto anfitrião.

Consola

Execute os passos seguintes para ativar a VPC partilhada, anexar projetos de serviço e conceder funções:

  1. Aceda à página VPC partilhada na Trusted Cloud consola.

    Aceda à VPC partilhada

  2. No seletor de projetos, selecione o projeto anfitrião.

  3. Clique em Configurar VPC partilhada. É apresentado o ecrã Ativar projeto anfitrião.

  4. Clique em Guardar e continuar. É apresentada a página Selecionar sub-redes.

  5. Em Modo de partilha, selecione Sub-redes individuais.

  6. Em Sub-redes a partilhar, selecione tier-1 e tier-2. Desmarque todas as outras caixas de verificação.

  7. Clique em Continuar. É apresentada a página Conceder autorizações.

  8. Em Anexe projetos de serviço, selecione o primeiro projeto de serviço e o segundo projeto de serviço. Desmarque todas as outras caixas de verificação em Anexar projetos de serviço.

  9. Em Acesso ao Kubernetes Engine, selecione Ativado.

  10. Clique em Guardar. É apresentada uma nova página.

  11. Em Autorizações de sub-rede individuais, selecione Nível 1.

  12. No painel do lado direito, elimine todas as contas de serviço que pertencem ao seu segundo projeto de serviço. Ou seja, elimine todas as contas de serviço que contenham SERVICE_PROJECT_2_NUM.

  13. No painel do lado direito, procure os nomes das contas de serviço do GKE e das APIs Google que pertencem ao seu primeiro projeto de serviço. Quer ver ambos os nomes de contas de serviço na lista. Se nenhuma das opções acima estiver na lista, introduza o nome da conta de serviço em Adicionar membros e clique em Adicionar.

  14. No painel central, em Autorizações de sub-rede individuais, selecione tier-2 e desmarque tier-1.

  15. No painel do lado direito, elimine todas as contas de serviço que pertencem ao seu primeiro projeto de serviço. Ou seja, elimine todas as contas de serviço que contenham SERVICE_PROJECT_1_NUM.

  16. No painel do lado direito, procure os nomes das contas de serviço do GKE e das APIs Google que pertencem ao seu segundo projeto de serviço. Quer ver ambos os nomes de contas de serviço na lista. Se nenhuma das opções acima estiver na lista, introduza o nome da conta de serviço em Adicionar membros e clique em Adicionar.

gcloud

  1. Ative a VPC partilhada no projeto anfitrião. O comando que usa depende da função administrativa necessária que tem.

    Se tiver a função de administrador da VPC partilhada ao nível da organização:

    gcloud compute shared-vpc enable HOST_PROJECT_ID
    

    Se tiver a função de administrador da VPC partilhada ao nível da pasta:

    gcloud beta compute shared-vpc enable HOST_PROJECT_ID
    
  2. Anexe o seu primeiro projeto de serviço ao projeto anfitrião:

    gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_1_ID \
        --host-project HOST_PROJECT_ID
    
  3. Anexe o segundo projeto de serviço ao projeto anfitrião:

    gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_2_ID \
        --host-project HOST_PROJECT_ID
    
  4. Obtenha a Política IAM para a sub-rede tier-1:

    gcloud compute networks subnets get-iam-policy tier-1 \
       --project HOST_PROJECT_ID \
       --region COMPUTE_REGION
    

    O resultado contém um campo etag. Tome nota do valor etag.

  5. Crie um ficheiro denominado tier-1-policy.yaml com o seguinte conteúdo:

    bindings:
    - members:
      - serviceAccount:SERVICE_PROJECT_1_NUM@cloudservices.s3ns-system.iam.gserviceaccount.com
      - serviceAccount:service-SERVICE_PROJECT_1_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com
      role: roles/compute.networkUser
    etag: ETAG_STRING
    

    Substitua ETAG_STRING pelo valor etag que anotou anteriormente.

  6. Defina a Política IAM para a sub-rede tier-1:

    gcloud compute networks subnets set-iam-policy tier-1 \
        tier-1-policy.yaml \
        --project HOST_PROJECT_ID \
        --region COMPUTE_REGION
    
  7. Obtenha a Política IAM para a sub-rede tier-2:

    gcloud compute networks subnets get-iam-policy tier-2 \
        --project HOST_PROJECT_ID \
        --region COMPUTE_REGION
    

    O resultado contém um campo etag. Tome nota do valor etag.

  8. Crie um ficheiro denominado tier-2-policy.yaml com o seguinte conteúdo:

    bindings:
    - members:
      - serviceAccount:SERVICE_PROJECT_2_NUM@cloudservices.s3ns-system.iam.gserviceaccount.com
      - serviceAccount:service-SERVICE_PROJECT_2_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com
      role: roles/compute.networkUser
    etag: ETAG_STRING
    

    Substitua ETAG_STRING pelo valor etag que anotou anteriormente.

  9. Defina a Política IAM para a sub-rede tier-2:

    gcloud compute networks subnets set-iam-policy tier-2 \
        tier-2-policy.yaml \
        --project HOST_PROJECT_ID \
        --region COMPUTE_REGION
    

Faça a gestão dos recursos de firewall

Se quiser que um cluster do GKE num projeto de serviço crie e faça a gestão dos recursos de firewall no seu projeto anfitrião, a conta de serviço do GKE do projeto de serviço tem de receber as autorizações do IAM adequadas através de uma das seguintes estratégias:

  • Conceda à conta de serviço do GKE do projeto de serviço a função Compute Security Admin ao projeto anfitrião.

Consola

  1. Na Trusted Cloud consola, aceda à página IAM.

    Aceder ao IAM

  2. Selecione o projeto anfitrião.

  3. Clique em Conceder acesso e, de seguida, introduza o principal da conta de serviço do GKE do projeto de serviço, service-SERVICE_PROJECT_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com.

  4. Selecione a função Compute Security Admin na lista pendente.

  5. Clique em Guardar.

gcloud

Conceda à conta de serviço do GKE do projeto de serviço a função Compute Security Admin no projeto anfitrião:

gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member=serviceAccount:service-SERVICE_PROJECT_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com \
    --role=roles/compute.securityAdmin

Substitua o seguinte:

  • HOST_PROJECT_ID: o ID do projeto anfitrião da VPC partilhada
  • SERVICE_PROJECT_NUM: o ID do projeto de serviço que contém a conta de serviço do GKE
  • Para uma abordagem mais detalhada, crie uma função de IAM personalizada que inclua apenas as seguintes autorizações: compute.networks.updatePolicy, compute.firewalls.list, compute.firewalls.get, compute.firewalls.create, compute.firewalls.update e compute.firewalls.delete. Conceda à conta de serviço do GKE do projeto de serviço essa função personalizada ao projeto anfitrião.

Consola

Crie uma função personalizada no projeto anfitrião que contenha as autorizações IAM mencionadas anteriormente:

  1. Na Trusted Cloud consola, aceda à página Funções.

    Aceda à página Funções

  2. Use a lista pendente na parte superior da página para selecionar o projeto de alojamento.

  3. Clique em Criar função.

  4. Introduza um título, uma descrição, um ID e um estágio de lançamento da função para a função. Não é possível alterar o nome da função depois de a função ser criada.

  5. Clique em Adicionar autorizações.

  6. Filtre por compute.networks e selecione as autorizações do IAM mencionadas anteriormente.

  7. Depois de selecionar todas as autorizações necessárias, clique em Adicionar.

  8. Clique em Criar.

Conceda à conta de serviço do GKE do projeto de serviço a função personalizada criada recentemente no projeto anfitrião:

  1. Na Trusted Cloud consola, aceda à página IAM.

    Aceder ao IAM

  2. Selecione o projeto anfitrião.

  3. Clique em Conceder acesso e, de seguida, introduza o principal da conta de serviço do GKE do projeto de serviço, service-SERVICE_PROJECT_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com.

  4. Filtre pelo Título da função personalizada recém-criada e selecione-a.

  5. Clique em Guardar.

gcloud

  1. Crie uma função personalizada no projeto anfitrião que contenha as autorizações IAM mencionadas anteriormente:

    gcloud iam roles create ROLE_ID \
        --title="ROLE_TITLE" \
        --description="ROLE_DESCRIPTION" \
        --stage=LAUNCH_STAGE \
        --permissions=compute.networks.updatePolicy,compute.firewalls.list,compute.firewalls.get,compute.firewalls.create,compute.firewalls.update,compute.firewalls.delete \
        --project=HOST_PROJECT_ID
    
  2. Conceda à conta de serviço do GKE do projeto de serviço a função personalizada criada recentemente no projeto anfitrião:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member=serviceAccount:service-SERVICE_PROJECT_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com \
        --role=projects/HOST_PROJECT_ID/roles/ROLE_ID
    

    Substitua o seguinte:

    • ROLE_ID: o nome da função, como gkeFirewallAdmin
    • ROLE_TITLE: um título amigável para a função, como GKE Firewall Admin
    • ROLE_DESCRIPTION: uma breve descrição da função, como GKE service account FW permissions
    • LAUNCH_STAGE: a fase de lançamento da função no respetivo ciclo de vida, como ALPHA, BETA ou GA
    • HOST_PROJECT_ID: o ID do projeto anfitrião da VPC partilhada
    • SERVICE_PROJECT_NUM: o ID do projeto de serviço que contém a conta de serviço do GKE

Se tiver clusters em mais do que um projeto de serviço, tem de escolher uma das estratégias e repeti-la para a conta de serviço do GKE de cada projeto de serviço.

Resumo das funções concedidas em sub-redes

Segue-se um resumo das funções concedidas nas sub-redes:

Conta de serviço Função Sub-rede
service-SERVICE_PROJECT_1_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com Utilizador de rede de Calcular tier-1
SERVICE_PROJECT_1_NUM@cloudservices.s3ns-system.iam.gserviceaccount.com Utilizador de rede de Calcular tier-1
service-SERVICE_PROJECT_2_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com Utilizador de rede de Calcular tier-2
SERVICE_PROJECT_2_NUM@cloudservices.s3ns-system.iam.gserviceaccount.com Utilizador de rede de Calcular tier-2

Valide o acesso ao GKE

Quando anexa um projeto de serviço, a ativação do acesso ao GKE concede à conta de serviço do GKE do projeto de serviço as autorizações para realizar operações de gestão de rede no projeto anfitrião.

O GKE atribui automaticamente a seguinte função no projeto anfitrião quando ativa o acesso ao GKE:

Membro Função Recurso
service-SERVICE_PROJECT_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com Utilizador do agente do serviço de anfitrião Conta de serviço do GKE no projeto anfitrião

No entanto, tem de adicionar a autorização de IAM Compute Network Usermanualmente à conta de serviço do GKE do projeto de serviço para aceder à rede anfitriã.

Membro Função Recurso
service-SERVICE_PROJECT_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com Utilizador de rede de Calcular Sub-rede específica ou projeto de anfitrião completo

Se um projeto de serviço foi anexado sem ativar o acesso ao GKE, partindo do princípio de que a API GKE já foi ativada no projeto anfitrião e no projeto de serviço, pode atribuir manualmente as autorizações à conta de serviço do GKE do projeto de serviço adicionando as seguintes associações de funções do IAM no projeto anfitrião:

Membro Função Recurso
service-SERVICE_PROJECT_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com Utilizador de rede de Calcular Sub-rede específica ou projeto de anfitrião completo
service-SERVICE_PROJECT_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com Utilizador do agente do serviço de anfitrião Agente de serviço do GKE no projeto anfitrião

Conceda a função de utilizador de agente do serviço de alojamento

O agente de serviço do GKE de cada projeto de serviço tem de ter uma associação para a função Utilizador do agente de serviço anfitrião (roles/container.hostServiceAgentUser) no projeto anfitrião. O agente do serviço do GKE tem o seguinte formato:

service-SERVICE_PROJECT_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com

Onde SERVICE_PROJECT_NUM é o número do projeto do seu projeto de serviço.

Esta associação permite que o agente de serviço do GKE do projeto de serviço execute operações de gestão de rede no projeto anfitrião, como se fosse o agente de serviço do GKE do projeto anfitrião. Esta função só pode ser concedida ao agente de serviço do GKE de um projeto de serviço.

Consola

Se tem usado a Trusted Cloud consola, não tem de conceder explicitamente a função Utilizador do agente de serviço anfitrião. Isto foi feito automaticamente quando usou a consola para anexar projetos de serviço ao seu projeto anfitrião. Trusted Cloud

gcloud

  1. Para o seu primeiro projeto, conceda a função de utilizador do agente de serviço anfitrião ao agente de serviço do GKE do projeto. Esta função é concedida no seu projeto anfitrião:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member serviceAccount:service-SERVICE_PROJECT_1_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com \
        --role roles/container.hostServiceAgentUser
    
  2. Para o segundo projeto, conceda a função de utilizador do agente de serviço anfitrião ao agente de serviço do GKE do projeto. Esta função é concedida no seu projeto anfitrião:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member serviceAccount:service-SERVICE_PROJECT_2_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com \
        --role roles/container.hostServiceAgentUser
    

Valide as sub-redes utilizáveis e os intervalos de endereços IP secundários

Quando cria um cluster, tem de especificar uma sub-rede e os intervalos de endereços IP secundários a usar para os pods e os serviços do cluster. Existem vários motivos pelos quais um intervalo de endereços IP pode não estar disponível para utilização. Quer crie o cluster com a consola ou a CLI gcloud, deve especificar intervalos de endereços IP utilizáveis. Trusted Cloud

Um intervalo de endereços IP é utilizável para os serviços do novo cluster se o intervalo ainda não estiver em utilização. O intervalo de endereços IP que especificar para os pods do novo cluster pode ser um intervalo não usado ou um intervalo partilhado com os pods nos seus outros clusters. Não é possível usar intervalos de endereços IP criados e geridos pelo GKE no seu cluster.

Pode listar as sub-redes utilizáveis e os intervalos de endereços IP secundários de um projeto através da CLI gcloud.

gcloud

gcloud container subnets list-usable \
    --project SERVICE_PROJECT_ID \
    --network-project HOST_PROJECT_ID

Substitua SERVICE_PROJECT_ID pelo ID do projeto do projeto de serviço.

Se omitir a opção --project ou --network-project, o comando da CLI gcloud usa o projeto predefinido da sua configuração ativa. Uma vez que o projeto de anfitrião e o projeto de rede são distintos, tem de especificar um ou ambos os seguintes elementos: --project e --network-project.

O resultado é semelhante ao seguinte:

PROJECT: xpn-host
REGION: REGION_NAME
NETWORK: shared-net
SUBNET: tier-2
RANGE: 172.16.4.0/22

SECONDARY_RANGE_NAME: tier-2-services
IP_CIDR_RANGE: 172.20.0.0/14
STATUS: usable for pods or services

SECONDARY_RANGE_NAME: tier-2-pods
IP_CIDR_RANGE: 172.16.16.0/20
STATUS: usable for pods or services

PROJECT: xpn-host
REGION: REGION_NAME
NETWORK: shared-net
SUBNET: tier-1
RANGE: 10.0.4.0/22

SECONDARY_RANGE_NAME: tier-1-services
IP_CIDR_RANGE: 10.0.32.0/20
STATUS: usable for pods or services

SECONDARY_RANGE_NAME: tier-1-pods
IP_CIDR_RANGE: 10.4.0.0/14
STATUS: usable for pods or services

O comando list-usable devolve uma lista vazia nas seguintes situações:

  • Quando a conta de serviço do GKE do projeto de serviço não tem a função de utilizador do agente de serviço anfitrião no projeto anfitrião.
  • Quando a conta de serviço do GKE no projeto anfitrião não existe (por exemplo, se tiver eliminado essa conta acidentalmente).
  • Quando a API GKE não está ativada no projeto anfitrião, o que implica que a conta de serviço do GKE no projeto anfitrião está em falta.

Para mais informações, consulte a secção de resolução de problemas.

Limites de intervalo de endereços IP secundários

Pode criar 30 intervalos secundários numa determinada sub-rede. Para cada cluster, precisa de dois intervalos secundários: um para os pods e outro para os serviços.

Crie um cluster no seu primeiro projeto de serviço

Para criar um cluster no seu primeiro projeto de serviço, siga os passos abaixo com a CLI gcloud ou a Trusted Cloud consola.

Consola

  1. Aceda à página do Google Kubernetes Engine na Trusted Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. No seletor de projetos, selecione o seu primeiro projeto de serviço.

  3. Clique em Criar.

  4. Na secção Autopilot ou Standard, clique em Configurar.

  5. Em Nome, introduza tier-1-cluster.

  6. Na lista pendente Região, selecione a mesma região que usou para as sub-redes.

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

  8. Em Rede de clusters, selecione shared-net.

  9. Para Sub-rede de nós, selecione tier-1.

  10. Em Opções de rede avançadas, para Intervalo de endereços de pods predefinido do cluster, selecione tier-1-pods.

  11. Para Intervalo de moradas de serviço, selecione serviços de nível 1.

  12. Clique em Criar.

  13. Quando a criação estiver concluída, na lista de clusters, clique em tier-1-cluster.

  14. Na página Detalhes do cluster, clique no separador Nós

  15. Em Conjuntos de nós, clique no nome do conjunto de nós que quer inspecionar.

  16. Em Grupos de instâncias, clique no nome do grupo de instâncias que quer inspecionar. Por exemplo, gke-tier-1-cluster-default-pool-5c5add1f-grp.

  17. Na lista de instâncias, verifique se os endereços IP internos dos seus nós estão no intervalo principal da sub-rede de nível 1: 10.0.4.0/22.

gcloud

Crie um cluster denominado tier-1-cluster no seu primeiro projeto de serviço:

gcloud container clusters create-auto tier-1-cluster \
    --project=SERVICE_PROJECT_1_ID \
    --location=CONTROL_PLANE_LOCATION \
    --network=projects/HOST_PROJECT_ID/global/networks/shared-net \
    --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/tier-1 \
    --cluster-secondary-range-name=tier-1-pods \
    --services-secondary-range-name=tier-1-services

Substitua CONTROL_PLANE_LOCATION pela região do Compute Engine do plano de controlo do seu cluster.

Quando a criação estiver concluída, verifique se os nós do cluster estão no intervalo principal da sub-rede de nível 1: 10.0.4.0/22.

gcloud compute instances list --project SERVICE_PROJECT_1_ID

A saída mostra os endereços IP internos dos nós:

NAME                    ZONE           ... INTERNAL_IP
gke-tier-1-cluster-...  ZONE_NAME      ... 10.0.4.2
gke-tier-1-cluster-...  ZONE_NAME      ... 10.0.4.3
gke-tier-1-cluster-...  ZONE_NAME      ... 10.0.4.4

Crie um cluster no seu segundo projeto de serviço

Para criar um cluster no segundo projeto de serviço, siga os passos abaixo com a CLI gcloud ou a Trusted Cloud consola.

Consola

  1. Aceda à página do Google Kubernetes Engine na Trusted Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. No seletor de projetos, selecione o segundo projeto de serviço.

  3. Clique em Criar.

  4. Na secção Padrão ou Piloto automático, clique em Configurar.

  5. Em Nome, introduza tier-2-cluster.

  6. Na lista pendente Região, selecione a mesma região que usou para as sub-redes.

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

  8. Para Rede, selecione shared-net.

  9. Para Sub-rede de nós, selecione tier-2.

  10. Para Intervalo de endereços do agrupamento predefinido, selecione agrupamentos de nível 2.

  11. Para Intervalo de moradas de serviço, selecione serviços de nível 2.

  12. Clique em Criar.

  13. Quando a criação estiver concluída, na lista de clusters, clique em tier-2-cluster.

  14. Na página Detalhes do cluster, clique no separador Nós

  15. Em Conjuntos de nós, clique no nome do conjunto de nós que quer inspecionar.

  16. Em Grupos de instâncias, clique no nome do grupo de instâncias que quer inspecionar. Por exemplo, gke-tier-2-cluster-default-pool-5c5add1f-grp.

  17. Na lista de instâncias, verifique se os endereços IP internos dos seus nós estão no intervalo principal da sub-rede de nível 2: 172.16.4.0/22.

gcloud

Crie um cluster com o nome tier-2-cluster no seu segundo projeto de serviço:

gcloud container clusters create-auto tier-2-cluster \
    --project=SERVICE_PROJECT_2_ID \
    --location=CONTROL_PLANE_LOCATION \
    --network=projects/HOST_PROJECT_ID/global/networks/shared-net \
    --subnetwork=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/tier-2 \
    --cluster-secondary-range-name=tier-2-pods \
    --services-secondary-range-name=tier-2-services

Quando a criação estiver concluída, verifique se os nós do cluster estão no intervalo principal da sub-rede de nível 2: 172.16.4.0/22.

gcloud compute instances list --project SERVICE_PROJECT_2_ID

A saída mostra os endereços IP internos dos nós:

NAME                    ZONE           ... INTERNAL_IP
gke-tier-2-cluster-...  ZONE_NAME      ... 172.16.4.2
gke-tier-2-cluster-...  ZONE_NAME      ... 172.16.4.3
gke-tier-2-cluster-...  ZONE_NAME      ... 172.16.4.4

Crie regras de firewall

Para permitir o tráfego na rede e entre os clusters na rede, tem de criar firewalls. As secções seguintes demonstram como criar e atualizar regras da firewall:

Crie uma regra de firewall para ativar a ligação SSH a um nó

No projeto anfitrião, crie uma regra de firewall para a rede shared-net. Permita a entrada de tráfego na porta TCP 22, o que lhe permite ligar-se aos nós do cluster através de SSH.

Consola

  1. Aceda à página Firewall na Trusted Cloud consola.

    Aceda à firewall

  2. No seletor de projetos, selecione o projeto anfitrião.

  3. No menu Redes da VPC, clique em Criar regra de firewall.

  4. Em Nome, introduza my-shared-net-rule.

  5. Para Rede, selecione shared-net.

  6. Para Direção do tráfego, selecione Entrada.

  7. Para Ação em caso de correspondência, selecione Permitir.

  8. Para Alvos, selecione Todas as instâncias na rede.

  9. Para Filtro de origem, selecione Intervalos de IP.

  10. Para Intervalos IP de origem, introduza 0.0.0.0/0.

  11. Para Protocolos e portas, selecione Protocolos e portas especificados. Na caixa, introduza tcp:22.

  12. Clique em Criar.

gcloud

Crie uma regra de firewall para a sua rede partilhada:

gcloud compute firewall-rules create my-shared-net-rule \
    --project HOST_PROJECT_ID \
    --network shared-net \
    --direction INGRESS \
    --allow tcp:22

Ligue-se a um nó através de SSH

Depois de criar a firewall que permite o tráfego de entrada na porta TCP 22, ligue-se ao nó através de SSH.

Consola

  1. Aceda à página do Google Kubernetes Engine na Trusted Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. No seletor de projetos, selecione o seu primeiro projeto de serviço.

  3. Clique em tier-1-cluster.

  4. Na página Detalhes do cluster, clique no separador Nós.

  5. Em Conjuntos de nós, clique no nome do conjunto de nós.

  6. Em Grupos de instâncias, clique no nome do grupo de instâncias. Por exemplo, gke-tier-1-cluster-default-pool-faf87d48-grp.

  7. Na lista de instâncias, tome nota dos endereços IP internos dos nós. Estes endereços estão no intervalo 10.0.4.0/22.

  8. Para um dos seus nós, clique em SSH. Isto tem êxito porque o SSH usa a porta TCP 22, que é permitida pela regra da firewall.

gcloud

Apresente os nós no seu primeiro projeto de serviço:

gcloud compute instances list --project SERVICE_PROJECT_1_ID

A saída inclui os nomes dos nós no cluster:

NAME                                           ...
gke-tier-1-cluster-default-pool-faf87d48-3mf8  ...
gke-tier-1-cluster-default-pool-faf87d48-q17k  ...
gke-tier-1-cluster-default-pool-faf87d48-x9rk  ...

Estabeleça ligação a um dos seus nós através de SSH:

gcloud compute ssh NODE_NAME \
    --project SERVICE_PROJECT_1_ID \
    --zone COMPUTE_ZONE

Substitua o seguinte:

Atualize a regra de firewall para permitir o tráfego entre nós

  1. Na janela da linha de comandos do SSH, inicie a CoreOS Toolbox:

    /usr/bin/toolbox
    
  2. Na shell da caixa de ferramentas, envie um ping para um dos seus outros nós no mesmo cluster. Por exemplo:

    ping 10.0.4.4
    

    O comando ping é bem-sucedido porque o seu nó e o outro nó estão ambos no intervalo 10.0.4.0/22.

  3. Agora, experimente enviar um ping para um dos nós no cluster no seu outro projeto de serviço. Por exemplo:

    ping 172.16.4.3
    

    Desta vez, o comando ping falha porque a regra de firewall não permite o tráfego do protocolo de mensagens de controlo da Internet (ICMP).

  4. Num comando normal, e não na shell da caixa de ferramentas, atualize a regra da firewall para permitir o ICMP:

    gcloud compute firewall-rules update my-shared-net-rule \
        --project HOST_PROJECT_ID \
        --allow tcp:22,icmp
    
  5. Na shell da caixa de ferramentas, envie um ping novamente para o nó. Por exemplo:

    ping 172.16.4.3
    

    Desta vez, o comando ping é bem-sucedido.

Crie regras de firewall adicionais

Pode criar regras de firewall adicionais para permitir a comunicação entre nós, pods e serviços nos seus clusters.

Por exemplo, a seguinte regra permite que o tráfego entre a partir de qualquer nó, Pod ou serviço em tier-1-cluster em qualquer porta TCP ou UDP:

gcloud compute firewall-rules create my-shared-net-rule-2 \
    --project HOST_PROJECT_ID \
    --network shared-net \
    --allow tcp,udp \
    --direction INGRESS \
    --source-ranges 10.0.4.0/22,10.4.0.0/14,10.0.32.0/20

A regra seguinte permite que o tráfego entre a partir de qualquer nó, Pod ou serviço em tier-2-cluster em qualquer porta TCP ou UDP:

gcloud compute firewall-rules create my-shared-net-rule-3 \
    --project HOST_PROJECT_ID \
    --network shared-net \
    --allow tcp,udp \
    --direction INGRESS \
    --source-ranges 172.16.4.0/22,172.20.0.0/14,172.16.16.0/20

O Kubernetes também tenta criar e gerir recursos de firewall quando necessário, por exemplo, quando cria um serviço de equilibrador de carga. Se o Kubernetes não conseguir alterar as regras da firewall devido a um problema de autorização, é gerado um evento do Kubernetes para lhe dar orientações sobre como fazer as alterações.

Se quiser conceder autorização ao Kubernetes para alterar as regras da firewall, consulte o artigo Gerir recursos da firewall.

Para equilibradores de carga de entrada, se o Kubernetes não conseguir alterar as regras da firewall devido a autorização insuficiente, é emitido um evento firewallXPNError a cada vários minutos. No GLBC 1.4 e posterior, pode desativar o som do evento firewallXPNError adicionando a anotação networking.gke.io/suppress-firewall-xpn-error: "true" ao recurso de entrada. Pode sempre remover esta anotação para ativar o som.

Crie um cluster com base no intercâmbio da rede da VPC numa VPC partilhada

Pode usar a VPC partilhada com clusters baseados no intercâmbio da rede da VPC.

Isto requer que conceda as seguintes autorizações no projeto anfitrião à conta de utilizador ou à conta de serviço usada para criar o cluster:

  • compute.networks.get

  • compute.networks.updatePeering

Também tem de garantir que o intervalo de endereços IP do plano de controlo não se sobrepõe a outros intervalos reservados na rede partilhada.

Nesta secção, cria um cluster nativo de VPC denominado cluster-vpc numa rede de VPC partilhada predefinida.

Consola

  1. Aceda à página do Google Kubernetes Engine na Trusted Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. Clique em Criar.

  3. Na secção Autopilot ou Standard, clique em Configurar.

  4. Em Nome, introduza cluster-vpc.

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

  6. Selecione Cluster privado.

  7. (Opcional para o Autopilot): defina o Intervalo de IPs do plano de controlo como 172.16.0.16/28.

  8. Na lista pendente Rede, selecione a rede de VPC que criou anteriormente.

  9. Na lista pendente Sub-rede do nó, selecione a sub-rede partilhada que criou anteriormente.

  10. Configure o cluster conforme necessário.

  11. Clique em Criar.

gcloud

Execute o seguinte comando para criar um cluster denominado cluster-vpc numa VPC partilhada predefinida:

gcloud container clusters create-auto private-cluster-vpc \
    --project=PROJECT_ID \
    --location=CONTROL_PLANE_LOCATION \
    --network=projects/HOST_PROJECT/global/networks/shared-net \
    --subnetwork=SHARED_SUBNETWORK \
    --cluster-secondary-range-name=tier-1-pods \
    --services-secondary-range-name=tier-1-services \
    --enable-private-nodes \
    --master-ipv4-cidr=172.16.0.0/28

Reserve endereços IP

Pode reservar endereços IP internos e externos para os seus clusters de VPC partilhada. Certifique-se de que os endereços IP estão reservados no projeto de serviço.

Para endereços IP internos, tem de indicar a sub-rede à qual o endereço IP pertence. Para reservar um endereço IP em vários projetos, use o URL do recurso completo para identificar a sub-rede.

Pode usar o seguinte comando na Google Cloud CLI para reservar um endereço IP interno:

gcloud compute addresses create RESERVED_IP_NAME \
    --region=COMPUTE_REGION \
    --subnet=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNETWORK_NAME \
    --addresses=IP_ADDRESS \
    --project=SERVICE_PROJECT_ID

Para chamar este comando, tem de ter a autorização compute.subnetworks.use adicionada à sub-rede. Pode conceder ao autor da chamada uma função compute.networkUser na sub-rede ou conceder ao autor da chamada uma função personalizada com a autorização compute.subnetworks.use ao nível do projeto.

Limpar

Depois de concluir os exercícios neste guia, execute as seguintes tarefas para remover os recursos e evitar a incorrência de encargos indesejados na sua conta:

Elimine os clusters

Elimine os dois agrupamentos que criou.

Consola

  1. Aceda à página do Google Kubernetes Engine na Trusted Cloud consola.

    Aceda ao Google Kubernetes Engine

  2. No seletor de projetos, selecione o seu primeiro projeto de serviço.

  3. Selecione o tier-1-cluster e clique em Eliminar.

  4. No seletor de projetos, selecione o segundo projeto de serviço.

  5. Selecione o tier-2-cluster e clique em Eliminar.

gcloud

gcloud container clusters delete tier-1-cluster \
    --project SERVICE_PROJECT_1_ID \
    --location CONTROL_PLANE_LOCATION

gcloud container clusters delete tier-2-cluster \
    --project SERVICE_PROJECT_2_ID \
    --location CONTROL_PLANE_LOCATION

Desative a VPC partilhada

Desative a VPC partilhada no projeto anfitrião.

Consola

  1. Aceda à página VPC partilhada na Trusted Cloud consola.

    Aceda à VPC partilhada

  2. No seletor de projetos, selecione o projeto anfitrião.

  3. Clique em Desativar VPC partilhada.

  4. Introduza HOST_PROJECT_ID no campo e clique em Desativar.

gcloud

gcloud compute shared-vpc associated-projects remove SERVICE_PROJECT_1_ID \
    --host-project HOST_PROJECT_ID

gcloud compute shared-vpc associated-projects remove SERVICE_PROJECT_2_ID \
    --host-project HOST_PROJECT_ID

gcloud compute shared-vpc disable HOST_PROJECT_ID

Elimine as regras de firewall

Remova as regras de firewall que criou.

Consola

  1. Aceda à página Firewall na Trusted Cloud consola.

    Aceda à firewall

  2. No seletor de projetos, selecione o projeto anfitrião.

  3. Na lista de regras, selecione my-shared-net-rule, my-shared-net-rule-2 e my-shared-net-rule-3.

  4. Clique em Eliminar.

gcloud

Elimine as regras de firewall:

gcloud compute firewall-rules delete \
    my-shared-net-rule \
    my-shared-net-rule-2 \
    my-shared-net-rule-3 \
    --project HOST_PROJECT_ID

Elimine a rede partilhada

Elimine a rede partilhada que criou.

Consola

  1. Aceda à página Redes VPC na Trusted Cloud consola.

    Aceda a redes de VPC

  2. No seletor de projetos, selecione o projeto anfitrião.

  3. Na lista de redes, selecione shared-net.

  4. Clique em Eliminar rede de VPC.

gcloud

gcloud compute networks subnets delete tier-1 \
    --project HOST_PROJECT_ID \
    --region COMPUTE_REGION

gcloud compute networks subnets delete tier-2 \
    --project HOST_PROJECT_ID \
    --region COMPUTE_REGION

gcloud compute networks delete shared-net --project HOST_PROJECT_ID

Remova a função de utilizador do agente do serviço de alojamento

Remova as funções de utilizador do agente do serviço anfitrião dos seus dois projetos de serviço.

Consola

  1. Aceda à página IAM na Trusted Cloud consola.

    Aceda ao IAM

  2. No seletor de projetos, selecione o projeto anfitrião.

  3. Na lista de membros, selecione a linha que mostra que service-SERVICE_PROJECT_1_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com tem a função de utilizador do agente de serviço anfitrião do Kubernetes Engine atribuída.

  4. Selecione a linha que mostra que service-SERVICE_PROJECT_2_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com tem a função de utilizador do agente de serviço anfitrião do Kubernetes Engine atribuída.

  5. Clique em Remover acesso.

gcloud

  1. Remova a função de utilizador do agente de serviço anfitrião da conta de serviço do GKE do seu primeiro projeto de serviço:

    gcloud projects remove-iam-policy-binding HOST_PROJECT_ID \
        --member serviceAccount:service-SERVICE_PROJECT_1_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com \
        --role roles/container.hostServiceAgentUser
    
  2. Remova a função de utilizador do agente de serviço anfitrião da conta de serviço do GKE do seu segundo projeto de serviço:

    gcloud projects remove-iam-policy-binding HOST_PROJECT_ID \
        --member serviceAccount:service-SERVICE_PROJECT_2_NUM@container-engine-robot.s3ns.iam.gserviceaccount.com \
        --role roles/container.hostServiceAgentUser
    

Resolução de problemas

As secções seguintes ajudam a resolver problemas comuns com clusters de VPC partilhada.

Erro: não foi possível obter metadados do projeto de rede

A mensagem seguinte é um erro comum quando trabalha com clusters de VPC partilhada:

Failed to get metadata from network project. GCE_PERMISSION_DENIED: Google
Compute Engine: Required 'compute.projects.get' permission for
'projects/HOST_PROJECT_ID

Este erro pode ocorrer pelos seguintes motivos:

  • A API GKE não foi ativada no projeto anfitrião.

  • A conta de serviço do GKE do projeto anfitrião não existe. Por exemplo, pode ter sido eliminado.

  • A conta de serviço do GKE do projeto anfitrião não tem a função de agente do serviço do Kubernetes Engine (container.serviceAgent) no projeto anfitrião. A associação pode ter sido removida acidentalmente.

  • A conta de serviço do GKE do projeto de serviço não tem a função de utilizador do agente de serviço anfitrião no projeto anfitrião.

Para resolver o problema, determine se a conta de serviço do GKE do projeto anfitrião existe.

Se a conta de serviço não existir, faça o seguinte:

  • Se a API GKE não estiver ativada no projeto anfitrião, ative-a. Esta ação cria a conta de serviço do GKE do projeto anfitrião e concede à conta de serviço do GKE do projeto anfitrião a função de agente de serviço do Kubernetes Engine (container.serviceAgent) no projeto anfitrião.

  • Se a API GKE estiver ativada no projeto anfitrião, significa que a conta de serviço do GKE do projeto anfitrião foi eliminada ou não tem a função de agente de serviço do Kubernetes Engine (container.serviceAgent) no projeto anfitrião. Para restaurar a conta de serviço do GKE ou a associação de funções, tem de desativar e, em seguida, reativar a API GKE. Para mais informações, consulte o artigo Erro 400/403: faltam autorizações de edição na conta.

Problema: conetividade

Se estiver a ter problemas de conetividade entre VMs do Compute Engine que estão na mesma rede da nuvem virtual privada (VPC) ou duas redes da VPC ligadas com o intercâmbio da rede da VPC, consulte o artigo Resolução de problemas de conetividade entre instâncias de máquinas virtuais (VMs) com endereços IP internos na documentação da nuvem virtual privada (VPC).

Problema: perda de pacotes

Se estiver a ter problemas com a perda de pacotes ao enviar tráfego de um cluster para um endereço IP externo através do Cloud NAT, dos clusters nativos da VPC ou do agente de mascaramento de IP, consulte o artigo Resolva problemas de perda de pacotes do Cloud NAT a partir de um cluster.

O que se segue?