7 mejores prácticas para el uso de contenedores según Google

Nota. traducir: El autor del artículo original es Théo Chamley, arquitecto de soluciones en la nube de Google. En esta publicación para el blog de Google Cloud, proporciona un resumen de la guía más detallada de su empresa, llamada "Mejores prácticas para operar contenedores" En él, los expertos de Google recopilaron las mejores prácticas para operar contenedores en el contexto del uso de Google Kubernetes Engine y más, abordando una amplia gama de temas: desde seguridad hasta monitoreo y registro. Entonces, ¿cuáles son las prácticas de contenedores más importantes según Google?

7 mejores prácticas para el uso de contenedores según Google

Motor Kubernetes (Servicio basado en Kubernetes para ejecutar aplicaciones en contenedores en Google Cloud - aprox. traducción) es una de las mejores formas de ejecutar cargas de trabajo que necesitan escalar. Kubernetes garantizará el buen funcionamiento de la mayoría de las aplicaciones si están en contenedores. Pero si desea que su aplicación sea fácil de administrar y aprovechar al máximo Kubernetes, debe seguir las mejores prácticas. Simplificarán el funcionamiento de la aplicación, su seguimiento y depuración, y también aumentarán la seguridad.

En este artículo, repasaremos una lista de cosas que debe saber y hacer para ejecutar contenedores de forma eficaz en Kubernetes. Quienes deseen profundizar en los detalles deben leer el material. Mejores prácticas para operar contenedores, y también prestar atención a nuestra publicación anterior sobre el montaje de contenedores.

1. Utilice mecanismos de registro de contenedores nativos

Si la aplicación se ejecuta en un clúster de Kubernetes, no se necesitan muchos registros. Es probable que ya haya un sistema de registro centralizado integrado en el clúster que está utilizando. En el caso de utilizar Kubernetes Engine, este es el responsable Registro de Stackdriver. (Nota. traducir: Y si utiliza su propia instalación de Kubernetes, le recomendamos que eche un vistazo más de cerca a nuestra solución de código abierto. Casa de registro.) Mantenga su vida simple y utilice mecanismos de registro de contenedores nativos. Escriba registros en stdout y stderr; se recibirán, guardarán e indexarán automáticamente.

Si lo desea, también puede escribir registros en formato JSON. Este enfoque facilitará la adición de metadatos. Y con ellos, Stackdriver Logging tendrá la capacidad de buscar registros utilizando estos metadatos.

2.Asegúrese de que los contenedores no tengan estado y sean inmutables.

Para que los contenedores funcionen correctamente en un clúster de Kubernetes, deben ser sin estado e inmutables. Una vez que se cumplen estas condiciones, Kubernetes puede hacer su trabajo, creando y destruyendo entidades de aplicación cuando y donde sea necesario.

Apátrida significa que cualquier estado (datos persistentes de cualquier tipo) se almacena fuera del contenedor. Para ello, dependiendo de las necesidades, se pueden utilizar diferentes tipos de almacenamiento externo: Almacenamiento en la nube, Discos persistentes, Redis, Nube SQL u otras bases de datos administradas. (Nota. traducir: Lea más sobre esto en nuestro artículo “Operadores para Kubernetes: cómo ejecutar aplicaciones con estado. ")

Inmutable significa que el contenedor no será modificado durante su vida: no habrá actualizaciones, parches, cambios de configuración. Si necesita actualizar el código de su aplicación o aplicar un parche, cree una nueva imagen e impleméntela. Se recomienda mover la configuración del contenedor (puerto de escucha, opciones del entorno de ejecución, etc.) externamente, para Misterios и Mapas de configuración. Se pueden actualizar sin tener que crear una nueva imagen de contenedor. Para crear fácilmente canalizaciones con ensamblaje de imágenes, puede utilizar Construcción en la nube. (Nota. traducir: Utilizamos una herramienta de código abierto para estos fines. dapp.)

7 mejores prácticas para el uso de contenedores según Google
Un ejemplo de actualización de la configuración de implementación en Kubernetes usando ConfigMap montado en pods como configuración

3. Evite los contenedores privilegiados

No ejecutas aplicaciones como root en tus servidores, ¿verdad? Si un atacante ingresa a la aplicación, obtendrá acceso de root. Las mismas consideraciones se aplican a la no ejecución de contenedores privilegiados. Si necesita cambiar la configuración en el host, puede darle al contenedor información específica capacidades usando la opción securityContext en Kubernetes. Si necesitas cambiar sistemas, Kubernetes tiene resumen separado para esto. En general, trate de aprovechar al máximo en eso- y contenedores sidecar para realizar operaciones privilegiadas similares. No es necesario que sean accesibles ni para el tráfico interno ni externo.

Si administra un clúster, puede utilizar Política de seguridad del módulo para restricciones en el uso de contenedores privilegiados.

4. Evite ejecutar como root

Ya se ha hablado de los contenedores privilegiados, pero será aún mejor si, además, no ejecutas aplicaciones dentro del contenedor como root. Si un atacante encuentra una vulnerabilidad remota en una aplicación con derechos de root que permite la ejecución de código, después de lo cual puede abandonar el contenedor a través de una vulnerabilidad aún desconocida, obtendrá root en el host.

La mejor manera de evitar esto es, en primer lugar, no ejecutar nada como root. Para hacer esto, puedes usar la directiva. USER в Dockerfile o runAsUser en Kubernetes. El administrador del clúster también puede configurar el comportamiento de aplicación mediante Política de seguridad del módulo.

5.Haga que la aplicación sea fácil de monitorear

Al igual que el registro, la supervisión es una parte integral de la gestión de aplicaciones. Una solución de monitoreo popular en la comunidad de Kubernetes es Prometeo - un sistema que detecta automáticamente pods y servicios que requieren monitoreo. (Nota. traducir: Vea también nuestro reporte detallado sobre el tema del monitoreo usando Prometheus y Kubernetes.) controlador de pila es capaz de monitorear clústeres de Kubernetes e incluye su propia versión de Prometheus para el monitoreo de aplicaciones.

7 mejores prácticas para el uso de contenedores según Google
Panel de Kubernetes en Stackdriver

Prometheus espera que la aplicación envíe métricas al punto final HTTP. Disponible para esto Bibliotecas cliente de Prometheus. El mismo formato es utilizado por otras herramientas como censo abierto и Istio.

6.Haga que el estado de salud de la aplicación esté disponible.

La gestión de aplicaciones en producción se ve favorecida por su capacidad de comunicar su estado a todo el sistema. ¿Se está ejecutando la aplicación? ¿Está bien? ¿Estás listo para recibir tráfico? ¿Cómo se comporta? La forma más común de resolver este problema es implementar controles de salud. (controles de salud). Kubernetes tiene dos tipos: sondas de vida y preparación.

Para sonda de vida (controles de vitalidad) la aplicación debe tener un punto final HTTP que devuelva una respuesta "200 OK" si es funcional y se satisfacen sus dependencias básicas. Para sonda de preparación (verificaciones de preparación del servicio) la aplicación debe tener otro punto final HTTP que devuelva una respuesta "200 OK" si la aplicación se encuentra en buen estado, se han completado los pasos de inicialización y cualquier solicitud válida no genera un error. Kubernetes solo enrutará el tráfico al contenedor si la aplicación está lista según estas comprobaciones. Se pueden fusionar dos puntos finales si no hay diferencia entre los estados de actividad y preparación.

Puede leer más sobre esto en el artículo relacionado de Sandeep Dinesh, desarrollador defensor de Google: “Mejores prácticas de Kubernetes: configuración de controles de estado con sondas de preparación y actividad".

7. Elija cuidadosamente la versión de su imagen.

La mayoría de las imágenes públicas y privadas utilizan un sistema de etiquetado similar al descrito en Mejores prácticas para la construcción de contenedores. Si la imagen utiliza un sistema cercano a versionado semántico, es necesario tener en cuenta las características específicas del etiquetado. Por ejemplo, etiqueta latest puede pasar con frecuencia de una imagen a otra; no se puede confiar en él si necesita compilaciones e instalaciones predecibles y repetibles.

Puedes usar la etiqueta X.Y.Z (casi siempre no cambian), pero en este caso, realice un seguimiento de todos los parches y actualizaciones de la imagen. Si la imagen que estás usando tiene una etiqueta X.Y, esta es una buena opción para la media dorada. Al elegirlo, recibe parches automáticamente y al mismo tiempo confía en la versión estable de la aplicación.

PD del traductor

Lea también en nuestro blog:

Fuente: habr.com

Añadir un comentario