IBM Cloud Docs
Découverte de l'architecture Code Engine et de l'isolement des charges de travail

Découverte de l'architecture Code Engine et de l'isolement des charges de travail

IBM Cloud® Code Engine est la plateforme IBM Cloud qui unifie les images de conteneur, les applications à 12 facteurs, les fonctions et les travaux par lots au sein d'un guichet unique. Il s'agit d'un système à plusieurs locataires composé de trois blocs de construction principaux : un plan de contrôle, un ou plusieurs fragments et une couche de routage. Le plan de contrôle et les fragments sont matérialisés en tant que clusters Kubernetes multizones distincts. Le diagramme suivant fournit une représentation graphique de l'architecture.

Code Engine diagramme d'architecture diagramme d'architecture diagramme d'architecture
Code Engine

Code Engine repose sur des clusters IBM Cloud Kubernetes Service et dépend des composants et de l'isolement des charges de travail d'IBM Cloud Kubernetes Service. Pour plus d'informations, voir Architecture des clusters VPC IBM Cloud Kubernetes Service.

Tous les composants sont gérés et détenus par IBM et sont exécutés dans le compte IBM Cloud. Chaque cluster s'exécute dans son propre VPC et est séparé des autres clusters.

Le plan de contrôle Code Engine exécute les composants partagés entre tous les utilisateurs Code Engine et institue le cluster Kubernetes comme un véritable système à service partagé. Le plan de contrôle est composé de quatre microservices qui y sont déployés.

microservices à plan de contrôleCode Engine
Composant Objectif
Courtier de ressource Crée et supprime des ressources de projet Code Engine dans le contrôleur de ressources IBM Cloud et demande que le projet soit positionné sur un fragment.
Contrôleur de positionnement de projet Sélectionne un fragment et demande la création, la suppression et l'isolement du projet sur le fragment.
Serveur d'API Fournit les informations cibles (fichier KUBECONFIG) pour le projet sélectionné. Il effectue également des contrôles de règle d'accès IAM et écrit des enregistrements d'audit.
Kube API proxy Met en cache chaque demande d'API sur le cluster de fragments approprié, procède à des contrôles de règle IAM et écrit des enregistrements d'audit.

Les fragments exécutent la charge de travail du client, telle que les générations, les travaux par lots ou les applications. En conséquence, le cluster de fragments exécute les microservices suivants pour contrôler les charges de travail du client.

Microservices de la grappe Shard
Composant Objectif
Contrôleur d'isolement de projet Gère et isole l'espace de nom Kubernetes correspondant à la ressource du projet Code Engine. Il surveille et garantit l'application des modalités d'isolement, tels que le contrôle d'accès basé sur les rôles (RBAC), les règles de sécurité des pods, le quota de ressources et les règles réseau.
Contrôleur de certificat et de domaine de projet Gère le domaine et les certificats pour le noeud final de route du projet. Le noeud final est composé d'une entrée DNS et d'un certificat générique.
Knative et Istio Gèrent le cycle de vie des applications. Knative est chargé de mettre à l'échelle l'application. Istio est chargé d'acheminer le trafic vers la révision et le conteneur appropriés de l'application.
Contrôleur de lots Gère le cycle de vie et les conteneurs pour les travaux et les exécutions de travaux.
Contrôleur de génération Gère le cycle de vie et les conteneurs pour les générations et les exécutions de génération.
Liaison de service et opérateur IBM Cloud Gèrent le cycle de vie des secrets associés aux liaisons des services IBM Cloud et des applications et travaux.
Contrôleur de source d'événement IBM Cloud Object Storage Gère le cycle de vie des abonnements d'événement à partir du service IBM Cloud Object Storage.
Régulateur automatique de noeud de cluster Met le fragment à l'échelle en ajoutant et en retirant des noeuds worker en fonction de la demande de capacité.
IBM Cloud Monitoring Envoie les métriques de service à IBM Cloud Monitoring. Pour plus d'informations sur ces métriques, voir la rubrique décrivant la surveillance pour Code Engine.
IBM® Cloud Logs Transmet les journaux et les métriques de plateforme à IBM Cloud Logs. Pour plus d'informations, voir Audit des événements Code Engine.

Isolement des charges de travail Code Engine

Code Engine est un service régional à service partagé dans lequel les titulaires partagent le même réseau et la même infrastructure de calcul. En particulier, le réseau et l'infrastructure de calcul sont des ressources partagées et certains éléments de gestion sont communs à tous les locataires. Code Engine implémente les contrôles suivants pour séparer les locataires :

  • Les ressources de projet Code Engine sont séparées au sein d'un environnement Kubernetes sécurisé qui s'exécute dans une région multizone IBM Cloud.
  • Les projets Code Engine et les ressources qu'ils contiennent, telles que l'application, les générations et les travaux exécutés sur des clusters partagés, utilisent des composants de gestion partagés.
  • Pour séparer l'accès aux ressources du projet, Code Engine effectue plusieurs niveaux de contrôle d'authentification et d'autorisation dans les composants apiserver et kube-api-proxy (voir tableau précédent).
    • Les contrôles des règles d'authentification et d'accès IAM sont effectués au niveau du projet.
    • Pour gérer l'accès multi-locataires à l'API Kubernetes sous-jacente, l'accès direct au serveur API n'est pas autorisé. Utilisez à la place l'API personnalisée Code Engine Kube-api-proxy pour l'accès.
    • Les contrôles d'accès basés sur les rôles sont effectués au niveau de la ressource pour permettre aux utilisateurs autorisés uniquement d'effectuer certaines opérations sur les ressources du projet.
  • L'autorisation est contrôlée par le client en affectant les rôles manager, reader ou writer aux utilisateurs pour une ressource de projet Code Engine dans IAM.
  • Pour restreindre la charge de travail du client, Code Engine applique les concepts suivants :
    • Isolement des conteneurs via différentes techniques d'isolement Linux. Ces techniques garantissent plusieurs couches de sécurité afin d'empêcher l'escalade de privilèges des conteneurs et de restreindre l'utilisation du conteneur à un ensemble limité de privilèges système.
    • Quota de ressources et LimitRange pour éviter la consommation excessive de ressources.
    • Règles réseau pour contrôler le flot réseau au sein de l'environnement.
  • Les composants à service partagé sont sécurisés, par exemple en désactivant la recherche inversée dans KubeDNS.
  • Pour limiter le rayon de projection, chaque cluster de fragments s'exécute dans son propre VPC, qui est isolé des autres VPC de fragment.
  • La protection DDOS est activée automatiquement pour tous les nœuds finaux, y compris les applications client, via Cloud Internet Services (CIS) sans coût supplémentaire pour vous. DDoS couvre les attaques des protocoles des couches 3 et 4 (TCP/IP) de l'interconnexion des systèmes (OSI), mais pas les attaques de la couche 7 ( HTTP ). Voir DDoS protection.
  • Si vous avez besoin de règles de pare-feu d'application web (WAF), confiez votre propre instance IBM Cloud Internet Services ( CIS ) ou un service de passerelle tiers avec un domaine personnalisé devant vos points de terminaison Code Engine et activez un pare-feu d'application web dans cette instance.