Saltar al contenido principal

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​

  1. Validating: Validan y pueden rechazar
  2. 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