Este artigo apresenta conceitos e práticas essenciais para o gerenciamento de clusters GKE multi-tenant, baseado no lab Managing a GKE Multi-tenant Cluster with Namespaces. Abordamos IAM roles, RBAC, Resource Quotas e GKE Usage Metering, fundamentais para a certificação GCP Professional Cloud Architect (PCA).
Índice
GKE IAM Roles
Os IAM roles do GKE controlam o acesso ao nível do GCP, permitindo ou negando acesso aos clusters e seus recursos. Abaixo estão os principais roles disponíveis:
| Role | Descrição |
|---|---|
Kubernetes Engine Admin (roles/container.admin) | Fornece acesso completo ao gerenciamento de clusters e seus objetos da API do Kubernetes. Um usuário com este role pode criar, editar e deletar qualquer recurso em qualquer cluster e namespaces subsequentes. |
Kubernetes Engine Developer (roles/container.developer) | Fornece acesso aos objetos da API do Kubernetes dentro dos clusters. Um usuário com este role pode criar, editar e deletar recursos em qualquer cluster e namespaces subsequentes. |
Kubernetes Engine Cluster Admin (roles/container.clusterAdmin) | Fornece acesso ao gerenciamento de clusters. Um usuário com este role não terá acesso para criar ou editar recursos dentro de qualquer cluster ou namespaces diretamente, mas poderá criar, modificar e deletar qualquer cluster. |
Kubernetes Engine Viewer (roles/container.viewer) | Acesso somente leitura aos recursos do GKE. Um usuário com este role terá acesso somente leitura a namespaces e seus recursos. |
Kubernetes Engine Cluster Viewer (roles/container.clusterViewer) | Acesso de get e list aos clusters GKE. Este é o role mínimo necessário para qualquer pessoa que precise acessar recursos dentro dos namespaces de um cluster. |
Associando IAM Roles a Service Accounts
Para associar um role IAM a uma service account no GCP (a nível de projeto):
| |
Nota: O role container.clusterViewer é necessário para que a service account possa acessar o cluster. Sem ele, mesmo com RBAC configurado, a service account não conseguirá se autenticar no cluster.
RBAC no Kubernetes
O RBAC (Role-Based Access Control) no Kubernetes controla o acesso aos recursos dentro do cluster. É importante entender a diferença:
- IAM Roles: Controlam acesso ao nível do GCP (quem pode acessar o cluster)
- RBAC: Controla o que pode ser feito dentro do cluster (quais operações são permitidas)
Criando Roles
Via kubectl
| |
Via YAML
| |
Criando RoleBindings
Um RoleBinding associa uma Role a um usuário, grupo ou service account:
| |
Ou usando dry-run para revisar antes de aplicar:
| |
Autenticação com Service Account
Para usar uma service account para autenticação:
- Criar a chave da service account:
| |
- Ativar a service account:
| |
- Obter credenciais do cluster:
| |
Resource Quotas
Resource Quotas permitem limitar o uso de recursos em um namespace, controlando:
- Quantidade de recursos computacionais (CPU, memória)
- Quantidade de objetos (pods, services, etc.)
- Tipos específicos de recursos (LoadBalancers, PersistentVolumes, etc.)
Exemplo: Quota Simples
| |
Exemplo de uso:
| |
Verificar quota:
| |
Saída esperada:
Name: test-quota
Namespace: team-a
Resource Used Hard
-------- ---- ----
count/pods 2 2
count/services.loadbalancers 0 1
Exemplo: Quota de CPU e Memória
| |
Esta quota limita:
- Requests: CPU mínimo total de 2 cores, memória mínima de 8Gi
- Limits: CPU máximo total de 4 cores, memória máxima de 12Gi
Importante: Todos os pods no namespace devem ter requests e limits definidos quando uma ResourceQuota com limites de CPU/memória está ativa.
GKE Usage Metering
O GKE Usage Metering permite rastrear o uso de recursos (CPU e memória) por namespace, pod e labels, exportando os dados para o BigQuery. Isso é essencial para:
- Chargeback: Alocar custos por time/namespace
- Otimização: Identificar namespaces com uso excessivo
- Planejamento: Prever necessidades futuras de recursos
Habilitando Usage Metering
| |
Pré-requisitos:
- O dataset do BigQuery deve existir antes de habilitar o usage metering
- A service account do GKE precisa de permissões no BigQuery
Criando a Tabela de Cost Breakdown
O GKE Usage Metering cria duas tabelas no BigQuery:
gke_cluster_resource_usage: Baseado em requests (recursos solicitados)gke_cluster_resource_consumption: Baseado em consumo real
Para criar uma tabela de cost breakdown que combine dados de billing com usage metering, siga a documentação oficial.
Configuração de variáveis:
| |
Substituir variáveis no template:
| |
Criar scheduled query no BigQuery:
| |
Exemplos Práticos
Exemplo 1: Pod com Resource Requests e Limits
| |
Explicação:
- Requests: Garantem que o pod receberá pelo menos 100m de CPU e 128Mi de memória
- Limits: Impedem que o pod use mais que 400m de CPU e 512Mi de memória
Exemplo 2: ResourceQuota Completa
| |
Exemplo 3: Role de Desenvolvedor
| |
Exemplo 4: Quota por Contagem
| |
Best Practices
- Princípio do Menor Privilégio: Sempre conceda apenas as permissões necessárias
- Separação de Responsabilidades: Use namespaces para isolar times/projetos
- Resource Quotas: Defina quotas desde o início para evitar uso excessivo
- Monitoramento: Habilite Usage Metering para rastrear custos e uso
- IAM + RBAC: Combine IAM roles (nível GCP) com RBAC (nível Kubernetes) para segurança em camadas
- Service Accounts: Use service accounts específicas para cada time/aplicação
- Documentação: Documente todas as permissões e quotas configuradas
Conclusão
O gerenciamento eficiente de clusters GKE multi-tenant requer uma compreensão sólida de:
- IAM Roles para controle de acesso ao nível do GCP
- RBAC para controle de acesso dentro do Kubernetes
- Resource Quotas para limitar uso de recursos
- Usage Metering para rastreamento de custos e otimização
Esses conceitos são fundamentais não apenas para a certificação GCP PCA, mas também para a operação prática de clusters GKE em ambientes de produção.