Capítulo 2.2 - API Server
Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- Compreender o papel do API Server
- Explicar como o API Server valida e processa as requisições
- Entender autenticação e autorização
- Utilizar o kubectl para interagir com o API Server
O que é o API Server?
O API Server (kube-apiserver) é o ponto de entrada único para todas as interações com um cluster Kubernetes. É o único componente com o qual usuários e outros componentes do cluster se comunicam diretamente.
Funções do API Server
1. Ponto de Entrada Único
Todas as requisições passam pelo API Server:
kubectl→ API Server- Dashboard → API Server
- Controladores → API Server
- kubelet → API Server
2. Validação
O API Server valida todas as requisições:
- Formato correto (YAML/JSON)
- Esquema respeitado
- Restrições respeitadas
3. Autenticação e Autorização
- Autenticação: Quem é você? (certificados, tokens, etc.)
- Autorização: O que você pode fazer? (RBAC, ABAC, etc.)
4. Admission Control
Plugins que podem modificar ou rejeitar requisições:
- Validação de recursos
- Mutações (adição de valores padrão)
- Quotas e limites
Fluxo de Processamento de uma Requisição
API REST do Kubernetes
O API Server expõe uma API REST padrão:
Endpoints Principais
/api/v1/namespaces/{namespace}/pods
/api/v1/namespaces/{namespace}/services
/api/v1/namespaces/{namespace}/deployments
/apps/v1/namespaces/{namespace}/deployments
Métodos HTTP
- GET: Ler recursos
- POST: Criar recursos
- PUT: Atualizar recursos
- PATCH: Modificar parcialmente
- DELETE: Remover recursos
Exemplo com kubectl
# kubectl converte os comandos em chamadas API REST
kubectl get pods
# Torna-se: GET /api/v1/namespaces/default/pods
kubectl create -f pod.yaml
# Torna-se: POST /api/v1/namespaces/default/pods
Autenticação
O API Server suporta vários métodos de autenticação:
1. Certificados X.509
2. Service Accounts
Tokens para Pods que se comunicam com a API:
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-app
3. Tokens Estáticos
Arquivos de tokens para autenticação básica.
Autorização (RBAC)
O controle de acesso baseado em papéis (RBAC) determina o que um usuário pode fazer:
Exemplo de Role:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
Admission Control
Os Admission Controllers são plugins que interceptam as requisições:
Tipos de Admission Controllers
- Validating: Validam e podem rejeitar
- Mutating: Modificam as requisições antes do armazenamento
Exemplos
- ResourceQuota: Limita recursos por namespace
- LimitRanger: Aplica limites padrão
- PodSecurityPolicy: Aplica políticas de segurança
Performance e Escalabilidade
Otimizações
- Watch API: Notificações em tempo real ao invés de polling
- Paginação: Limita o número de resultados
- Field Selectors: Filtra resultados no lado do servidor
Métricas Importantes
- Latência das requisições
- Vazão (requisições/segundo)
- Tamanho das respostas
Comandos Úteis
# Ver os endpoints da API
kubectl get --raw /
# Ver os recursos disponíveis
kubectl api-resources
# Ver as versões da API
kubectl api-versions
# Testar a API diretamente
kubectl proxy
# Depois: curl http://localhost:8001/api/v1/pods
Resumo
Neste capítulo, você aprendeu:
API Server: Ponto de entrada único para todas as interações
Validação: Verifica o formato e o esquema das requisições
Segurança: Autenticação e autorização (RBAC)
Admission Control: Plugins para validação e mutação
API REST: Interface padrão para interagir com o Kubernetes
Próximos Passos
Agora que você entende o API Server:
Capítulo 2.3: etcd - O Banco de Dados do Cluster
Capítulo 2.4: Controller Manager
Capítulo criado em: Dezembro de 2024