Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado.

Consejos para Configurar Contenedores

Ejecutar contenedores bien construidos puede impactar enormemente en el rendimiento y la seguridad general de tu entorno.

A continuación, se presentan algunos consejos para configurar tus contenedores.

Para una discusión más detallada sobre la seguridad de los contenedores, también puedes consultar la Guía de Seguridad de Contenedores de Rancher.

Utiliza un sistema operativo común para contenedores

Cuando sea posible, deberías intentar estandarizar en un sistema operativo base común para contenedores.

Distribuciones más pequeñas, como Alpine y BusyBox, reducen el tamaño de la imagen del contenedor y, en general, presentan una menor superficie de ataque y vulnerabilidad.

Distribuciones populares como Ubuntu, Fedora y CentOS están más probadas en el campo y ofrecen más funcionalidad.

Comienza con un contenedor FROM scratch

Si tu microservicio es un binario estático independiente, deberías utilizar un contenedor FROM scratch.

El contenedor FROM scratch es una imagen oficial de Docker que está vacía para que puedas usarla para diseñar imágenes mínimas.

Esto tendrá la superficie de ataque más pequeña y el tamaño de imagen más reducido.

Ejecuta Procesos de Contenedor como No Privilegiados

Cuando sea posible, utiliza un usuario no privilegiado al ejecutar procesos dentro de tu contenedor. Aunque los entornos de ejecución de contenedores proporcionan aislamiento, las vulnerabilidades y ataques aún son posibles. Los montajes de host inadvertidos o accidentales también pueden verse afectados si el contenedor se está ejecutando como root. Para detalles sobre cómo configurar un contexto de seguridad para un pod o contenedor, consulta la documentación de Kubernetes.

Define límites de recursos

Aplica límites de CPU y memoria a tus pods. Esto puede ayudar a gestionar los recursos en tus nodos de trabajo y evitar que un microservicio que no funcione correctamente impacte a otros microservicios.

En Kubernetes estándar, puedes establecer límites de recursos a nivel de espacio de nombres. En Rancher, puedes establecer límites de recursos a nivel de proyecto y se propagarán a todos los espacios de nombres dentro del proyecto. Para más detalles, consulta la documentación de Rancher.

Al establecer cuotas de recursos, si estableces algo relacionado con CPU o Memoria (es decir, límites o reservas) en un proyecto o espacio de nombres, todos los contenedores requerirán un campo respectivo de CPU o Memoria establecido durante la creación. Para evitar establecer estos límites en cada contenedor durante la creación de cargas de trabajo, se puede especificar un límite de recursos de contenedor por defecto en el espacio de nombres.

La documentación de Kubernetes tiene más información sobre cómo se pueden establecer límites de recursos a nivel de contenedor y a nivel de espacio de nombres.

Define requisitos de recursos

Debes aplicar requisitos de CPU y memoria a tus pods. Esto es crucial para indicar al planificador qué tipo de nodo de computación necesita tu pod para ubicarse, y para asegurarse de que dicho nodo no sea sobreasignado. En Kubernetes, puedes establecer un requisito de recursos definiendo resources.requests en el campo de solicitudes de recursos en la especificación del contenedor de un pod. Para más detalles, consulta la documentación de Kubernetes.

Si estableces un límite de recursos para el espacio de nombres en el que se despliega el pod, y el contenedor no tiene una solicitud de recursos específica, el pod no podrá iniciarse. Para evitar establecer estos campos en cada contenedor durante la creación de cargas de trabajo, se puede especificar un límite de recursos de contenedor por defecto en el espacio de nombres.

Se recomienda definir requisitos de recursos a nivel de contenedor porque, de lo contrario, el planificador hará suposiciones que probablemente no serán útiles para tu aplicación cuando el clúster experimente carga.

Sondeos de vivacidad y disponibilidad

Configura sondeos de vivacidad y disponibilidad para tu contenedor. A menos que tu contenedor se bloquee completamente, Kubernetes no sabrá que está poco saludable a menos que crees un punto final o mecanismo que pueda informar el estado del contenedor. Alternativamente, asegúrate de que tu contenedor se detenga y se bloquee si está poco saludable.

La documentación de Kubernetes muestra cómo configurar sondeos de vivacidad y disponibilidad para contenedores.