Capítulo 2.2 - API Server
Objetivos de Aprendizaje
Al final de este capítulo, usted será capaz de:
- Comprender el rol del API Server
- Explicar cómo el API Server valida y procesa las solicitudes
- Comprender la autenticación y la autorización
- Utilizar kubectl para interactuar con el API Server
¿Qué es el API Server?
El API Server (kube-apiserver) es el punto de entrada único para todas las interacciones con un clúster de Kubernetes. Es el único componente con el que los usuarios y los demás componentes del clúster se comunican directamente.
Roles del API Server
1. Punto de Entrada Único
Todas las solicitudes pasan por el API Server:
kubectl→ API Server- Dashboard → API Server
- Controladores → API Server
- kubelet → API Server
2. Validación
El API Server valida todas las solicitudes:
- Formato correcto (YAML/JSON)
- Cumplimiento del esquema
- Respeto de las restricciones
3. Autenticación y Autorización
- Autenticación: ¿Quién es usted? (certificados, tokens, etc.)
- Autorización: ¿Qué puede hacer usted? (RBAC, ABAC, etc.)
4. Admission Control
Plugins que pueden modificar o rechazar las solicitudes:
- Validación de recursos
- Mutaciones (adición de valores predeterminados)
- Cuotas y límites
Flujo de Procesamiento de una Solicitud
API REST de Kubernetes
El API Server expone una API REST estándar:
Endpoints Principales
/api/v1/namespaces/{namespace}/pods
/api/v1/namespaces/{namespace}/services
/api/v1/namespaces/{namespace}/deployments
/apps/v1/namespaces/{namespace}/deployments
Métodos HTTP
- GET: Leer recursos
- POST: Crear recursos
- PUT: Actualizar recursos
- PATCH: Modificar parcialmente
- DELETE: Eliminar recursos
Ejemplo con kubectl
# kubectl convierte los comandos en llamadas a la API REST
kubectl get pods
# Se convierte en: GET /api/v1/namespaces/default/pods
kubectl create -f pod.yaml
# Se convierte en: POST /api/v1/namespaces/default/pods
Autenticación
El API Server soporta varios métodos de autenticación:
1. Certificados X.509
2. Service Accounts
Tokens para los Pods que se comunican con el API:
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-app
3. Tokens Estáticos
Archivos de tokens para autenticación básica.
Autorización (RBAC)
El control de acceso basado en roles (RBAC) determina lo que un usuario puede hacer:
Ejemplo de Role:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
Admission Control
Los Admission Controllers son plugins que interceptan las solicitudes:
Tipos de Admission Controllers
- Validating: Validan y pueden rechazar
- Mutating: Modifican las solicitudes antes de almacenarlas
Ejemplos
- ResourceQuota: Limita los recursos por namespace
- LimitRanger: Aplica límites predeterminados
- PodSecurityPolicy: Aplica políticas de seguridad
Rendimiento y Escalabilidad
Optimizaciones
- Watch API: Notificaciones en tiempo real en lugar de polling
- Paginación: Limita el número de resultados
- Field Selectors: Filtra los resultados en el servidor
Métricas Importantes
- Latencia de las solicitudes
- Rendimiento (solicitudes/segundo)
- Tamaño de las respuestas
Comandos Útiles
# Ver los endpoints de la API
kubectl get --raw /
# Ver los recursos disponibles
kubectl api-resources
# Ver las versiones de la API
kubectl api-versions
# Probar directamente la API
kubectl proxy
# Luego: curl http://localhost:8001/api/v1/pods
Resumen
En este capítulo, usted ha aprendido:
API Server: Punto de entrada único para todas las interacciones
Validación: Verifica el formato y el esquema de las solicitudes
Seguridad: Autenticación y autorización (RBAC)
Admission Control: Plugins para validación y mutación
API REST: Interfaz estándar para interactuar con Kubernetes
Próximos Pasos
Ahora que usted comprende el API Server:
Capítulo 2.3: etcd - La Base de Datos del Clúster
Capítulo 2.4: Controller Manager
Capítulo creado el: Diciembre 2024