Contenedores y microservicios: arquitectura y despliegue — Cuerpo de Gestión de Sistemas e Informática de la Administración del Estado
Test de 30 preguntas con explicaciones justificadas.
Pregunta 1: Según la arquitectura de microservicios, ¿cuál de los siguientes es un principio fundamental para la comunicación entre servicios?
- A) Los servicios deben compartir una base de datos común para garantizar la consistencia.
- B) La comunicación debe realizarse siempre de forma síncrona mediante llamadas HTTP REST.
- C) Los servicios deben estar débilmente acoplados y ser independientes en su despliegue.
- D) Cada servicio debe exponer su estado interno directamente a otros servicios.
El principio fundamental de los microservicios es el acoplamiento débil y la independencia de despliegue, como se describe en el patrón de arquitectura definido por Martin Fowler y otros.
Pregunta 2: En Docker, ¿qué comando se utiliza para construir una imagen a partir de un Dockerfile?
- A) docker create image
- B) docker build
- C) docker image run
- D) docker commit
El comando 'docker build' construye una imagen Docker a partir de un Dockerfile y un contexto, según la documentación oficial de Docker.
Pregunta 3: ¿Cuál es la función principal de un orquestador de contenedores como Kubernetes?
- A) Proporcionar un entorno de ejecución ligero para aplicaciones en contenedores.
- B) Gestionar el ciclo de vida de los contenedores, incluyendo despliegue, escalado y recuperación.
- C) Almacenar imágenes de contenedores en un registro privado.
- D) Monitorear el rendimiento de las aplicaciones en tiempo real.
Kubernetes es un sistema de orquestación que automatiza el despliegue, escalado y gestión de aplicaciones en contenedores, según la documentación del proyecto Kubernetes.
Pregunta 4: En el contexto de seguridad de contenedores, ¿qué establece el principio de privilegios mínimos?
- A) Los contenedores deben ejecutarse siempre con capacidades de superusuario (root).
- B) Los contenedores deben tener acceso a todos los recursos del host para un funcionamiento óptimo.
- C) Los contenedores deben ejecutarse con solo los permisos necesarios para su tarea.
- D) Cada contenedor debe aislarse en una máquina virtual independiente.
El principio de privilegios mínimos, fundamental en seguridad informática y aplicado a contenedores, indica que se deben conceder solo los permisos estrictamente necesarios para reducir la superficie de ataque.
Pregunta 5: ¿Qué es un 'Sidecar' en el patrón de diseño para microservicios?
- A) Un contenedor que se ejecuta en paralelo al contenedor principal para extender o mejorar su funcionalidad.
- B) Un servicio que actúa como puerta de enlace única para todas las peticiones entrantes.
- C) Una base de datos compartida que almacena el estado de todos los servicios.
- D) Un mecanismo para sincronizar relojes entre diferentes instancias de servicio.
El patrón Sidecar consiste en desplegar un contenedor auxiliar junto al contenedor principal para tareas como logging, monitorización o proxies, como se define en los patrones de diseño de microservicios.
Pregunta 6: Según el Esquema Nacional de Seguridad (ENS), ¿qué categoría de sistemas estaría obligada a aplicar medidas de seguridad en un despliegue de microservicios para la AGE?
- A) Solo los sistemas clasificados como de alta seguridad.
- B) Todos los sistemas que traten información clasificada.
- C) Todos los sistemas de información de la Administración General del Estado, según su categoría.
- D) Solo los sistemas que procesen datos personales.
El Real Decreto 3/2010, del ENS, establece en su artículo 2 que las medidas de seguridad se aplican a todos los sistemas de información de la AGE, clasificados en tres categorías (baja, media, alta).
Pregunta 7: En Kubernetes, ¿qué objeto se utiliza para exponer un conjunto de pods como un servicio de red?
- A) Deployment
- B) Ingress
- C) Service
- D) ConfigMap
El objeto Service en Kubernetes define un punto de acceso lógico a un conjunto de pods, proporcionando descubrimiento de servicios y balanceo de carga, según la documentación de Kubernetes.
Pregunta 8: ¿Qué tecnología de virtualización subyacente utilizan los contenedores Docker por defecto en Linux?
- A) Hyper-V
- B) KVM
- C) namespaces y cgroups del kernel
- D) VMware ESXi
Docker utiliza las características namespaces (para aislamiento) y cgroups (para limitación de recursos) del kernel de Linux, según la documentación técnica de Docker.
Pregunta 9: En una arquitectura de microservicios, el patrón 'Circuit Breaker' se utiliza principalmente para:
- A) Proteger un servicio ante fallos en llamadas a servicios externos, evitando cascadas de error.
- B) Gestionar la autenticación y autorización de usuarios.
- C) Almacenar en caché las respuestas de las bases de datos.
- D) Distribuir la carga de tráfico entre múltiples instancias.
El patrón Circuit Breaker, descrito por Martin Fowler, previene que un servicio continúe intentando ejecutar operaciones que probablemente fallen, permitiendo que el sistema se recupere.
Pregunta 10: ¿Cuál es el propósito del comando 'docker-compose'?
- A) Gestionar el clúster de contenedores en múltiples nodos.
- B) Definir y ejecutar aplicaciones Docker multi-contenedor.
- C) Monitorizar el rendimiento de los contenedores en ejecución.
- D) Construir imágenes Docker a partir de código fuente.
Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker multi-contenedor usando un archivo YAML, según la documentación oficial de Docker.
Pregunta 11: Según la Ley Orgánica 3/2018 (LOPDGDD), ¿qué principio debe aplicarse al tratar datos personales en microservicios?
- A) Principio de concentración de datos en un único servicio.
- B) Principio de minimización de datos, recogiendo solo los estrictamente necesarios.
- C) Principio de almacenamiento indefinido para disponibilidad.
- D) Principio de acceso libre entre servicios para eficiencia.
El artículo 5 del RGPD, incorporado por la LOPDGDD, establece el principio de minimización de datos: los datos personales deben ser adecuados, pertinentes y limitados a lo necesario.
Pregunta 12: ¿Qué objeto de Kubernetes se utiliza para gestionar el despliegue y actualización de un conjunto de pods?
- A) Pod
- B) ReplicaSet
- C) StatefulSet
- D) Deployment
El objeto Deployment en Kubernetes gestiona el despliegue declarativo y las actualizaciones de aplicaciones stateless, proporcionando actualizaciones rodantes y rollback.
Pregunta 13: En el contexto de contenedores, ¿qué es un 'registro' (registry)?
- A) Un sistema de monitorización de contenedores en ejecución.
- B) Un servicio para almacenar y distribuir imágenes de contenedores.
- C) Una base de datos que almacena los logs de los contenedores.
- D) Una herramienta para orquestar contenedores en un clúster.
Un registro de contenedores, como Docker Hub o un registry privado, es un servicio que almacena y distribuye imágenes de contenedores, según la documentación de Docker.
Pregunta 14: ¿Qué patrón de arquitectura se utiliza para gestionar la configuración distribuida en microservicios?
- A) Service Discovery
- B) API Gateway
- C) Configuration Server
- D) Message Broker
El patrón Configuration Server centraliza la configuración de los microservicios, permitiendo gestionarla externamente, como se describe en los patrones de diseño de microservicios de Chris Richardson.
Pregunta 15: En Kubernetes, ¿qué componente es responsable de programar los pods en los nodos?
- A) kubelet
- B) kube-proxy
- C) kube-scheduler
- D) etcd
El kube-scheduler es el componente del plano de control de Kubernetes que asigna pods a nodos en función de los recursos disponibles y las restricciones.
Pregunta 16: ¿Qué ventaja principal ofrecen los contenedores frente a las máquinas virtuales tradicionales?
- A) Mayor aislamiento de seguridad.
- B) Menor overhead y mayor eficiencia en el uso de recursos.
- C) Capacidad para ejecutar diferentes sistemas operativos en el mismo host.
- D) No requieren un sistema operativo huésped.
Los contenedores comparten el kernel del host, lo que reduce el overhead y mejora la eficiencia respecto a las máquinas virtuales, que requieren un sistema operativo completo por cada instancia.
Pregunta 17: Según el modelo de madurez de microservicios, ¿qué caracteriza a un servicio 'stateless'?
- A) Almacena el estado de la sesión en memoria local.
- B) No mantiene estado persistente entre peticiones, delegándolo a almacenes externos.
- C) Solo maneja peticiones de lectura.
- D) Requiere afinidad de sesión con el cliente.
Un servicio stateless no guarda estado de la sesión entre peticiones, lo que facilita la escalabilidad y resiliencia, según las mejores prácticas de arquitectura de microservicios.
Pregunta 18: ¿Qué comando de Docker se utiliza para ejecutar un contenedor en segundo plano (detached mode)?
- A) docker run -d
- B) docker start -b
- C) docker exec --detach
- D) docker attach --background
La opción '-d' o '--detach' en el comando 'docker run' ejecuta el contenedor en segundo plano, según la referencia de comandos de Docker.
Pregunta 19: En Kubernetes, ¿qué recurso se utiliza para gestionar el almacenamiento persistente independiente del ciclo de vida del pod?
- A) Volume
- B) PersistentVolume
- C) StorageClass
- D) ConfigMap
Un PersistentVolume (PV) es un recurso de almacenamiento en el clúster que existe independientemente de los pods, proporcionando almacenamiento persistente, según la documentación de Kubernetes.
Pregunta 20: ¿Qué protocolo es comúnmente utilizado para la comunicación asíncrona entre microservicios?
- A) HTTP/1.1
- B) gRPC
- C) AMQP (ej: RabbitMQ)
- D) FTP
AMQP (Advanced Message Queuing Protocol) es un protocolo de mensajería asíncrona utilizado en sistemas de microservicios para comunicación desacoplada mediante brokers como RabbitMQ.
Pregunta 21: ¿Qué herramienta se utiliza comúnmente para la gestión de paquetes y despliegues en Kubernetes?
- A) Ansible
- B) Helm
- C) Terraform
- D) Puppet
Helm es el gestor de paquetes para Kubernetes, que permite definir, instalar y actualizar aplicaciones Kubernetes mediante charts, según la documentación de Helm.
Pregunta 22: Según las buenas prácticas de Docker, ¿cuál es el propósito de usar un archivo .dockerignore?
- A) Ignorar contenedores en ejecución durante las operaciones de limpieza.
- B) Excluir archivos y directorios del contexto de construcción para reducir el tamaño de la imagen.
- C) Evitar que ciertas imágenes sean extraídas de registros públicos.
- D) Deshabilitar las capacidades de seguridad por defecto.
El archivo .dockerignore especifica qué archivos y directorios excluir del contexto de construcción, similar a .gitignore, para mejorar el rendimiento y reducir el tamaño de la imagen.
Pregunta 23: En el contexto del ENS, ¿qué medida de protección es aplicable a los sistemas que despliegan microservicios?
- A) Cifrado de datos en reposo y en tránsito, según la categoría del sistema.
- B) Uso exclusivo de software propietario.
- C) Almacenamiento centralizado de todos los logs en medios físicos.
- D) Despliegue obligatorio en infraestructura on-premise.
El Anexo II del Real Decreto 3/2010, ENS, especifica medidas de protección como el cifrado de datos en reposo y tránsito para las categorías media y alta.
Pregunta 24: ¿Qué componente de Kubernetes se encarga de exponer servicios HTTP/HTTPS desde el exterior del clúster?
- A) Service de tipo NodePort
- B) Service de tipo ClusterIP
- C) Ingress Controller
- D) kube-proxy
Un Ingress Controller (ej: Nginx Ingress) gestiona el acceso externo a servicios dentro del clúster, proporcionando routing HTTP/HTTPS y terminación SSL.
Pregunta 25: ¿Qué característica define a una arquitectura de microservicios frente a una monolítica?
- A) Todos los componentes se ejecutan en un único proceso.
- B) La aplicación se estructura como un conjunto de servicios pequeños e independientes.
- C) Comparten una única base de datos transaccional.
- D) El despliegue se realiza en una sola operación.
La arquitectura de microservicios descompone una aplicación en servicios pequeños, independientes y desacoplados, en contraste con la arquitectura monolítica.
Pregunta 26: ¿Qué comando de Kubernetes se utiliza para ver los pods en un namespace específico?
- A) kubectl get pods --all-namespaces
- B) kubectl get pods -n <namespace>
- C) kubectl list pods --namespace <namespace>
- D) kubectl describe pods <namespace>
El comando 'kubectl get pods -n <namespace>' lista los pods en el namespace especificado, según la referencia de comandos de kubectl.
Pregunta 27: En Docker, ¿cuál es la capa superior de una imagen que es escribible y específica de cada contenedor?
- A) Capa base (base layer)
- B) Capa de unión (union layer)
- C) Capa de contenedor (container layer)
- D) Capa de caché (cache layer)
La capa de contenedor (container layer) es la capa superior escribible y efímera que se añade sobre las capas de solo lectura de la imagen, según el modelo de almacenamiento de Docker.
Pregunta 28: ¿Qué patrón se utiliza para manejar fallos transitorios en la comunicación entre microservicios?
- A) Service Mesh
- B) Retry con backoff exponencial
- C) Bulkhead
- D) Event Sourcing
El patrón Retry con backoff exponencial reintenta llamadas fallidas con intervalos crecientes, manejando fallos transitorios, según los patrones de resiliencia en microservicios.
Pregunta 29: Según la Ley 40/2015 de Régimen Jurídico del Sector Público, ¿qué principio debe guiar la interoperabilidad entre sistemas en la AGE?
- A) Principio de neutralidad tecnológica.
- B) Principio de uso obligatorio de software privativo.
- C) Principio de mínima funcionalidad.
- D) Principio de desconexión automática.
El artículo 4 de la Ley 40/2015 establece el principio de neutralidad tecnológica, asegurando que las decisiones tecnológicas no limiten la interoperabilidad.
Pregunta 30: ¿Qué objeto de Kubernetes permite definir variables de entorno y configuraciones para los pods?
- A) Secret
- B) ConfigMap
- C) PersistentVolumeClaim
- D) Deployment
Un ConfigMap es un objeto de Kubernetes que almacena datos de configuración no confidenciales en pares clave-valor, que pueden ser usados como variables de entorno en pods.