Información sobre la arquitectura de Code Engine y el aislamiento de cargas de trabajo

IBM Cloud® Code Engine es la plataforma de IBM Cloud que unifica las imágenes de contenedor, las apps de 12 factores, las funciones y los trabajos por lotes como tienda única. Es un sistema de varios arrendatarios que consta de tres grandes bloques de construcción: un plano de control, un (conjunto de) fragmento (o fragmentos) y una capa de direccionamiento. El plano de control y los fragmentos se realizan como clústeres independientes de Kubernetes de varias zonas. El diagrama siguiente proporciona una visión general gráfica de la arquitectura.

Code Engine diagrama de arquitectura diagrama de arquitectura diagrama de arquitectura
Code Engine

Code Engine se basa en clústeres de IBM Cloud Kubernetes Service y depende de los componentes y del aislamiento de carga de trabajo de IBM Cloud Kubernetes Service. Para obtener más información, consulte Arquitectura de clúster de VPC de IBM Cloud Kubernetes Service.

Todos los componentes los gestiona IBM y son propiedad de IBM, y se ejecutan en la cuenta de IBM Cloud. Cada clúster se ejecuta en su propia VPC y es independiente de otros clústeres.

El plano de control de Code Engine ejecuta los componentes que comparten todos los usuarios de Code Engine y convierte al clúster Kubernetes en un verdadero sistema multiarrendatario. El plano de control consta de cuatro microservicios que se despliegan en él.

Code Engine microservicios de plano de control
Componente Finalidad
Intermediario de recursos Crea y suprime recursos de proyecto de Code Engine en el controlador de recursos de IBM Cloud y solicita la colocación del proyecto en un fragmento.
Controlador de ubicación de proyectos Selecciona un fragmento y solicita la creación, supresión y aislamiento del proyecto en el fragmento.
Servidor de API Proporciona la información de destino (archivo KUBECONFIG) para el proyecto seleccionado. También realiza comprobaciones de política de acceso de IAM y graba registros de auditoría.
Kube API proxy Envía por proxy cada solicitud de API al clúster de fragmentos adecuado, realiza comprobaciones de política de IAM y graba registros de auditoría.

Los fragmentos ejecutan la carga de trabajo del cliente como, por ejemplo, compilaciones, trabajos por lotes o apps. Por lo tanto, el clúster de fragmentos ejecuta los siguientes microservicios para controlar las cargas de trabajo del cliente.

Microservicios del clúster Shard
Componente Finalidad
Controlador de aislamiento de proyectos Gestiona y aísla el espacio de nombres de Kubernetes correspondiente al recurso de proyecto de Code Engine. Supervisa y garantiza que se apliquen los elementos de aislamiento, como el control de acceso basado en roles (RBAC), las políticas de seguridad de pod, la cuota de recursos y las políticas de red.
Controlador de cert y dominios de proyecto Gestiona el dominio y los certificados para el punto final de ruta del proyecto. El punto final consta de una entrada de DNS y un certificado comodín.
Knative e Istio Gestiona el ciclo de vida de las aplicaciones. Knative es responsable de escalar la aplicación. Istio es responsable de dirigir el tráfico a la revisión y el contenedor adecuados de la aplicación.
Controlador por lotes Gestiona el ciclo de vida y los contenedores para trabajos y ejecuciones de trabajo.
Controlador de compilación Gestiona el ciclo de vida y los contenedores para compilaciones y ejecuciones de compilación.
Enlaces de servicio y operador de IBM Cloud Gestiona el ciclo de vida de los secretos que están asociados a enlaces de servicios de IBM Cloud servicios con aplicaciones y trabajos.
Controlador de origen de sucesos de IBM Cloud Object Storage Gestiona el ciclo de vida de las suscripciones de sucesos desde el servicio de IBM Cloud Object Storage.
Escalador automático de nodo de clúster Escala el fragmento añadiendo y eliminando nodos de trabajo en función de la demanda de capacidad.
IBM Cloud Monitoring Envía métricas de servicio a IBM Cloud Monitoring. Para obtener más información sobre estas métricas, consulte Supervisión para Code Engine.
IBM® Cloud Logs Reenvía métricas y registros de plataforma a IBM Cloud Logs. Para obtener más información, consulte Sucesos de auditoría de Code Engine.

Aislamiento de cargas de trabajo de Code Engine

Code Engine es un servicio regional multiarrendatario en el que los arrendatarios comparten la misma infraestructura de cálculo y red. En concreto, la red y la infraestructura de computación son recursos compartidos y algunos componentes de gestión son comunes a todos los arrendatarios. Code Engine implementa los siguientes controles para separar los arrendatarios:

  • Los recursos del proyecto Code Engine se separan dentro de un entorno de Kubernetes seguro que se ejecuta en una región multizona de IBM Cloud.
  • Los proyectos y los recursos contenidos de Code Engine, como aplicaciones, compilaciones y trabajos que se ejecutan en clústeres compartidos que utilizan componentes de gestión compartida.
  • Para separar el acceso a los recursos del proyecto, Code Engine realiza varios niveles de autenticación y comprobaciones de autorización en los componentes apiserver y kube-api-proxy (consulte la tabla anterior),
    • Las comprobaciones de políticas de acceso y autenticación de IAM se realizan a nivel de proyecto.
    • Para gestionar el acceso de varios arrendatarios a la API de Kubernetes subyacente, no se permite el acceso directo al servidor de API. En su lugar, utilice la API Kube-api-proxy personalizada de Code Engine para obtener acceso.
    • Las comprobaciones de control de acceso basado en roles se realizan en un nivel de recursos para permitir que solo los usuarios autorizados realicen determinadas operaciones en los recursos de proyecto.
  • El cliente controla la autorización asignando los roles manager, reader o writer a usuarios para un recurso de proyecto de Code Engine dentro de IAM.
  • Para restringir la carga de trabajo del cliente, Code Engine impone los conceptos siguientes,
    • Aislamiento de contenedores mediante varias técnicas de aislamiento de Linux. Estas técnicas garantizan varias capas de seguridad para impedir la escalada de privilegios de los contenedores y para restringir los contenedores al uso de un conjunto limitado de privilegios del sistema.
    • Cuota de recursos y LimitRange para evitar el consumo excesivo de recursos.
    • Políticas de red para controlar los flujos de red dentro del entorno.
  • Los componentes de varios arrendatarios compartidos están protegidos, por ejemplo, mediante la inhabilitación de la búsqueda inversa en KubeDNS.
  • Para limitar el radio de afectación, cada clúster de fragmentos se ejecuta en su propia VPC, que se aísla de otras VPC de fragmento.
  • La protección DDOS se habilita automáticamente para todos los puntos finales, incluidas las aplicaciones de cliente, a través de Cloud Internet Services (CIS) sin coste adicional. DDoS la protección cubre los ataques a los protocolos de Capa 3 y Capa 4 (TCP/IP) de Interconexión de Sistemas (OSI), pero no los ataques a la Capa 7 ( HTTP ). Véase DDoS protection.
  • Si necesita reglas de cortafuegos de aplicaciones web (WAF), configure su propia instancia de IBM Cloud Internet Services ( CIS ) o un servicio de pasarela de terceros con un dominio personalizado delante de sus puntos finales de Code Engine y habilite un cortafuegos de aplicaciones web en esta instancia.