Informazioni sull'architettura Code Engine e sull'isolamento del carico di lavoro

IBM Cloud® Code Engine è la piattaforma IBM Cloud che unifica le immagini del contenitore, le applicazioni a 12 fattori, le funzioni e i lavori batch come un one - stop - shop. Si tratta di un sistema multi - tenant che consiste di tre blocchi di costruzione principali: un piano di controllo, un (insieme di) frammenti (o frammenti) e un livello di instradamento. Il piano di controllo e i frammenti sono realizzati come cluster Kubernetes multizona separati. Il seguente diagramma fornisce una panoramica grafica dell'architettura.

Code Engine schema di architettura schema di architettura schema di architettura
Code Engine

Code Engine si basa su cluster IBM Cloud Kubernetes Service e dipende dai componenti e dall'isolamento del carico di lavoro di IBM Cloud Kubernetes Service. Per ulteriori informazioni, vedi IBM Cloud Kubernetes Service Architettura del cluster VPC.

Tutti i componenti sono gestiti e di proprietà di IBM ed eseguiti nell'account IBM Cloud. Ogni cluster è in esecuzione nel proprio VPC e separato dagli altri cluster.

Il piano di controllo Code Engine esegue i componenti condivisi tra tutti gli utenti Code Engine e rende il cluster Kubernetes un vero sistema a più tenant. Il piano di controllo è costituito da quattro microservizi distribuiti su di esso.

Code Engine microservizi con piano di controllo
Componente Scopo
Broker risorse Crea ed elimina le risorse del progetto Code Engine nel controller di risorse IBM Cloud e richiede il posizionamento del progetto su un frammento.
Controller di posizionamento progetto Seleziona un frammento e richiede la creazione, l'eliminazione e l'isolamento del progetto sul frammento.
Server API Fornisce le informazioni di destinazione (file KUBECONFIG ) per il progetto selezionato. Esegue anche i controlli della politica di accesso IAM e scrive i record di verifica.
Kube API proxy Invia tramite proxy ogni richiesta API al cluster di frammenti appropriato, esegue i controlli della politica IAM e scrive i record di controllo.

I frammenti stanno eseguendo il carico di lavoro del cliente, ad esempio le build, i lavori batch o le app. Pertanto, il cluster di frammenti esegue i seguenti microservizi per controllare i workload del cliente.

Microservizi del cluster Shard
Componente Scopo
Controller di isolamento del progetto Gestisce e isola lo spazio dei nomi Kubernetes corrispondente alla risorsa del progetto Code Engine. Monitora e garantisce che vengano applicati gli aspetti di isolamento come RBAC (role - based - access - control), le politiche di sicurezza del pod, la quota di risorse e le politiche di rete.
Dominio del progetto e controller certificato Gestisce il dominio e i certificati per l'endpoint di instradamento del progetto. L'endpoint è costituito da una voce DNS e da un certificato jolly.
Knative e Istio Gestire il ciclo di vita delle applicazioni. Knative è responsabile del ridimensionamento dell'applicazione. Istio è responsabile dell'instradamento del traffico alla revisione e al contenitore appropriati dell'applicazione.
Controller batch Gestisce il ciclo di vita e i contenitori per lavori ed esecuzioni di lavori.
Controller di build Gestisce il ciclo di vita e i contenitori per le esecuzioni di build e build.
Bind del servizio e operatore di IBM Cloud Gestisci il ciclo di vita dei segreti associati ai bind dei servizi IBM Cloud alle applicazioni e ai lavori.
Controller di origine eventi IBM Cloud Object Storage Gestisci il ciclo di vita delle sottoscrizioni evento dal servizio IBM Cloud Object Storage.
Nodo cluster autoscaler Ridimensiona il frammento aggiungendo e rimuovendo nodi di lavoro in base alla domanda di capacità.
IBM Cloud Monitoring Invia le metriche del servizio a IBM Cloud Monitoring. Per ulteriori informazioni su queste metriche, vedi Monitoring for Code Engine.
IBM® Cloud Logs Inoltrare i log e le metriche della piattaforma a IBM Cloud Logs. Per ulteriori informazioni, vedi Controllo degli eventi per Code Engine.

Isolamento del carico di lavoro Code Engine

Code Engine è un servizio regionale a più tenant in cui i tenant condividono la stessa rete e infrastruttura di calcolo. In particolare, la rete e l'infrastruttura di calcolo sono risorse condivise e alcuni componenti di gestione sono comuni a tutti i tenant. Code Engine implementa i seguenti controlli per separare i tenant:

  • Le risorse del progetto Code Engine sono separate in un ambiente Kubernetes protetto in esecuzione in una regione multizona IBM Cloud.
  • Code Engine progetti e le relative risorse che li contengono, come applicazioni, build e lavori eseguiti su cluster condivisi che utilizzano componenti di gestione condivisi.
  • Per separare l'accesso alle risorse del progetto, Code Engine effettua diversi livelli di controlli di autenticazione e autorizzazione all'interno dei componenti apiserver e kube-api-proxy (vedi tabella precedente),
    • I controlli delle politiche di autenticazione e accesso IAM vengono eseguiti a livello di progetto.
    • Per gestire l'accesso a più tenant all'API Kubernetes sottostante, non è consentito l'accesso diretto al server API. Utilizza invece l'API Kube-api-proxy personalizzata Code Engine per accedere.
    • I controlli del controllo degli accessi basati sui ruoli vengono eseguiti a livello di risorsa per consentire solo agli utenti autorizzati di eseguire determinate operazioni sulle risorse di progetto.
  • L'autorizzazione viene controllata dal cliente assegnando i ruoli manager, reader o writer agli utenti per una risorsa del progetto Code Engine all'interno di IAM.
  • Per limitare il carico di lavoro del cliente, Code Engine applica i seguenti concetti,
    • Isolamento del contenitore tramite varie tecniche di isolamento Linux. Queste tecniche garantiscono più livelli di protezione per impedire l'escalation dei privilegi dei contenitori e per limitare i contenitori all'utilizzo di una serie limitata di privilegi di sistema.
    • Quota di risorse e LimitRange per evitare un consumo eccessivo di risorse.
    • Politiche di rete per controllare i flussi di rete nell'ambiente.
  • I componenti multi - tenant condivisi sono protetti, ad esempio, disabilitando la ricerca inversa in KubeDNS.
  • Per limitare il raggio di esplosione, ogni cluster di frammenti è in esecuzione nel proprio VPC, che è isolato da altri VPC di frammenti.
  • La protezione DDoS viene abilitata automaticamente per tutti gli endpoint, incluse le applicazioni del cliente, tramite Cloud Internet Services (CIS) senza alcun costo aggiuntivo per te. DDoS la protezione copre gli attacchi al protocollo OSI (System Interconnection) Layer 3 e Layer 4 (TCP/IP), ma non gli attacchi al Layer 7 ( HTTP ). Vedere DDoS protezione.
  • Se si richiedono regole WAF (Web Application Firewall), configurare la propria istanza IBM Cloud Internet Services ( CIS ) o un servizio gateway di terze parti con un dominio personalizzato davanti agli endpoint Code Engine e abilitare un Web Application Firewall in questa istanza.