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:
- Certifique-se de que tem uma Trusted Cloud by S3NS organização.
- Certifique-se de que a sua organização tem três Trusted Cloud by S3NS projetos.
- Certifique-se de que conhece os conceitos da VPC partilhada, incluindo as várias funções da gestão de identidade e de acesso (IAM) usadas pela VPC partilhada. As tarefas neste guia têm de ser realizadas por um administrador da VPC partilhada.
- Certifique-se de que conhece todas as restrições da política da organização aplicáveis à sua organização, pasta ou projetos. Um administrador de políticas da organização pode ter definido restrições que limitam os projetos que podem ser projetos anfitriões de VPC partilhada ou que limitam as sub-redes que podem ser partilhadas. Consulte as restrições da política da organização para mais informações.
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
Aceda à página Início da Trusted Cloud consola.
No seletor de projetos, selecione o projeto que escolheu para ser o projeto anfitrião.
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.
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
Aceda à página APIs e serviços na Trusted Cloud consola.
No seletor de projetos, selecione o projeto que escolheu para ser o projeto anfitrião.
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. PesquiseKubernetes Engine API
. Clique no cartão API Kubernetes Engine e, de seguida, clique em Ativar.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:
- No projeto anfitrião, crie uma rede denominada
shared-net
. - Crie duas sub-redes com os nomes
tier-1
etier-2
. - Para cada sub-rede, crie dois intervalos de endereços secundários: um para os serviços e um para os pods.
Consola
Aceda à página Redes VPC na Trusted Cloud consola.
No seletor de projetos, selecione o projeto anfitrião.
Clique em add_box Criar rede VPC.
Em Nome, introduza
shared-net
.Em Modo de criação de sub-rede, selecione Personalizado.
Na caixa Nova sub-rede, em Nome, introduza
tier-1
.Em Região, selecione uma região.
Em Tipo de pilha de IP, selecione IPv4 (pilha única).
Para o intervalo de IPv4, introduza
10.0.4.0/22
.Clique em Criar intervalo IPv4 secundário. Em Nome do intervalo da sub-rede, introduza
tier-1-services
e, em Intervalo IPv4 secundário, introduza10.0.32.0/20
.Clique em Adicionar intervalo de IP. Em Nome do intervalo da sub-rede, introduza
tier-1-pods
e, em Intervalo IPv4 secundário, introduza10.4.0.0/14
.Clique em Adicionar sub-rede.
Em Nome, introduza
tier-2
.Para Região, selecione a mesma região que selecionou para a sub-rede anterior.
Para o intervalo de IPv4, introduza
172.16.4.0/22
.Clique em Criar intervalo IPv4 secundário. Em Nome do intervalo da sub-rede, introduza
tier-2-services
e, em Intervalo IPv4 secundário, introduza172.16.16.0/20
.Clique em Adicionar intervalo de IP. Em Nome do intervalo da sub-rede, introduza
tier-2-pods
e, em Intervalo IPv4 secundário, introduza172.20.0.0/14
.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:
- No projeto anfitrião, ative a VPC partilhada.
- Anexe os dois projetos de serviço ao projeto anfitrião.
- 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 User
tier-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-redetier-2
do projeto anfitrião.
- No seu primeiro projeto de serviço, conceda a duas contas de serviço a função de
Consola
Execute os passos seguintes para ativar a VPC partilhada, anexar projetos de serviço e conceder funções:
Aceda à página VPC partilhada na Trusted Cloud consola.
No seletor de projetos, selecione o projeto anfitrião.
Clique em Configurar VPC partilhada. É apresentado o ecrã Ativar projeto anfitrião.
Clique em Guardar e continuar. É apresentada a página Selecionar sub-redes.
Em Modo de partilha, selecione Sub-redes individuais.
Em Sub-redes a partilhar, selecione tier-1 e tier-2. Desmarque todas as outras caixas de verificação.
Clique em Continuar. É apresentada a página Conceder autorizações.
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.
Em Acesso ao Kubernetes Engine, selecione Ativado.
Clique em Guardar. É apresentada uma nova página.
Em Autorizações de sub-rede individuais, selecione Nível 1.
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
.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.
No painel central, em Autorizações de sub-rede individuais, selecione tier-2 e desmarque tier-1.
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
.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
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
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
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
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 valoretag
.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 valoretag
que anotou anteriormente.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
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 valoretag
.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 valoretag
que anotou anteriormente.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
Na Trusted Cloud consola, aceda à página IAM.
Selecione o projeto anfitrião.
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
.Selecione a função
Compute Security Admin
na lista pendente.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 partilhadaSERVICE_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
ecompute.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:
Na Trusted Cloud consola, aceda à página Funções.
Use a lista pendente na parte superior da página para selecionar o projeto de alojamento.
Clique em Criar função.
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.
Clique em Adicionar autorizações.
Filtre por
compute.networks
e selecione as autorizações do IAM mencionadas anteriormente.Depois de selecionar todas as autorizações necessárias, clique em Adicionar.
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:
Na Trusted Cloud consola, aceda à página IAM.
Selecione o projeto anfitrião.
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
.Filtre pelo Título da função personalizada recém-criada e selecione-a.
Clique em Guardar.
gcloud
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
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, comogkeFirewallAdmin
ROLE_TITLE
: um título amigável para a função, comoGKE Firewall Admin
ROLE_DESCRIPTION
: uma breve descrição da função, comoGKE service account FW permissions
LAUNCH_STAGE
: a fase de lançamento da função no respetivo ciclo de vida, comoALPHA
,BETA
ouGA
HOST_PROJECT_ID
: o ID do projeto anfitrião da VPC partilhadaSERVICE_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 User
manualmente à 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
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
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
Aceda à página do Google Kubernetes Engine na Trusted Cloud consola.
No seletor de projetos, selecione o seu primeiro projeto de serviço.
Clique em add_box Criar.
Na secção Autopilot ou Standard, clique em Configurar.
Em Nome, introduza
tier-1-cluster
.Na lista pendente Região, selecione a mesma região que usou para as sub-redes.
No painel de navegação, clique em Rede.
Em Rede de clusters, selecione shared-net.
Para Sub-rede de nós, selecione tier-1.
Em Opções de rede avançadas, para Intervalo de endereços de pods predefinido do cluster, selecione tier-1-pods.
Para Intervalo de moradas de serviço, selecione serviços de nível 1.
Clique em Criar.
Quando a criação estiver concluída, na lista de clusters, clique em tier-1-cluster.
Na página Detalhes do cluster, clique no separador Nós
Em Conjuntos de nós, clique no nome do conjunto de nós que quer inspecionar.
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.
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
Aceda à página do Google Kubernetes Engine na Trusted Cloud consola.
No seletor de projetos, selecione o segundo projeto de serviço.
Clique em add_box Criar.
Na secção Padrão ou Piloto automático, clique em Configurar.
Em Nome, introduza
tier-2-cluster
.Na lista pendente Região, selecione a mesma região que usou para as sub-redes.
No painel de navegação, clique em Rede.
Para Rede, selecione shared-net.
Para Sub-rede de nós, selecione tier-2.
Para Intervalo de endereços do agrupamento predefinido, selecione agrupamentos de nível 2.
Para Intervalo de moradas de serviço, selecione serviços de nível 2.
Clique em Criar.
Quando a criação estiver concluída, na lista de clusters, clique em tier-2-cluster.
Na página Detalhes do cluster, clique no separador Nós
Em Conjuntos de nós, clique no nome do conjunto de nós que quer inspecionar.
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
.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:
- Criar uma regra de firewall para ativar a ligação SSH a um nó: Demonstra como criar uma regra de firewall que ativa o tráfego de fora dos clusters através de SSH.
Atualizar a regra de firewall para enviar ping entre nós: Demonstra como atualizar a regra de firewall para permitir o tráfego ICMP entre os clusters.
O SSH e o ICMP são usados como exemplos. Tem de criar regras de firewall que ativem os requisitos de rede da sua aplicação específica.
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
Aceda à página Firewall na Trusted Cloud consola.
No seletor de projetos, selecione o projeto anfitrião.
No menu Redes da VPC, clique em Criar regra de firewall.
Em Nome, introduza
my-shared-net-rule
.Para Rede, selecione shared-net.
Para Direção do tráfego, selecione Entrada.
Para Ação em caso de correspondência, selecione Permitir.
Para Alvos, selecione Todas as instâncias na rede.
Para Filtro de origem, selecione Intervalos de IP.
Para Intervalos IP de origem, introduza
0.0.0.0/0
.Para Protocolos e portas, selecione Protocolos e portas especificados. Na caixa, introduza
tcp:22
.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
Aceda à página do Google Kubernetes Engine na Trusted Cloud consola.
No seletor de projetos, selecione o seu primeiro projeto de serviço.
Clique em tier-1-cluster.
Na página Detalhes do cluster, clique no separador Nós.
Em Conjuntos de nós, clique no nome do conjunto de nós.
Em Grupos de instâncias, clique no nome do grupo de instâncias. Por exemplo, gke-tier-1-cluster-default-pool-faf87d48-grp.
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
.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:
NODE_NAME
: o nome de um dos seus nós.COMPUTE_ZONE
: o nome de uma zona do Compute Engine na região.
Atualize a regra de firewall para permitir o tráfego entre nós
Na janela da linha de comandos do SSH, inicie a CoreOS Toolbox:
/usr/bin/toolbox
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 intervalo10.0.4.0/22
.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).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
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
Aceda à página do Google Kubernetes Engine na Trusted Cloud consola.
Clique em add_box Criar.
Na secção Autopilot ou Standard, clique em Configurar.
Em Nome, introduza
cluster-vpc
.No painel de navegação, clique em Rede.
Selecione Cluster privado.
(Opcional para o Autopilot): defina o Intervalo de IPs do plano de controlo como
172.16.0.16/28
.Na lista pendente Rede, selecione a rede de VPC que criou anteriormente.
Na lista pendente Sub-rede do nó, selecione a sub-rede partilhada que criou anteriormente.
Configure o cluster conforme necessário.
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
Aceda à página do Google Kubernetes Engine na Trusted Cloud consola.
No seletor de projetos, selecione o seu primeiro projeto de serviço.
Selecione o tier-1-cluster e clique em Eliminar.
No seletor de projetos, selecione o segundo projeto de serviço.
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
Aceda à página VPC partilhada na Trusted Cloud consola.
No seletor de projetos, selecione o projeto anfitrião.
Clique em Desativar VPC partilhada.
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
Aceda à página Firewall na Trusted Cloud consola.
No seletor de projetos, selecione o projeto anfitrião.
Na lista de regras, selecione my-shared-net-rule, my-shared-net-rule-2 e my-shared-net-rule-3.
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
Aceda à página Redes VPC na Trusted Cloud consola.
No seletor de projetos, selecione o projeto anfitrião.
Na lista de redes, selecione shared-net.
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
Aceda à página IAM na Trusted Cloud consola.
No seletor de projetos, selecione o projeto anfitrião.
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.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.Clique em Remover acesso.
gcloud
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
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?
- Leia a vista geral da VPC partilhada.
- Saiba como aprovisionar uma VPC partilhada.
- Leia a vista geral da rede do GKE.
- Leia acerca das regras da firewall criadas automaticamente.
- Saiba como resolver problemas de conetividade entre instâncias de máquinas virtuais (VM) com endereços IP internos.