Pular para o conteúdo principal

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​

  1. Validating: Validam e podem rejeitar
  2. 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