Wat zijn cloudcontainers?


Een cloudcontainer is een overdraagbare, lichtgewicht eenheid software die een applicatie samenbundelt met de afhankelijkheden (“dependency’s”), zoals bibliotheken (“library’s”), binaire bestanden en configuratiebestanden. Hierdoor kan deze consistent werken in elke omgeving, waaronder diverse cloudplatforms.

Enterprise Applications

Deze bundeling wordt gerealiseerd door een soort besturingssysteemvirtualisatie, waarbij functies van de kernel van het besturingssysteem worden gebruikt om processen te isoleren en in de hand te houden hoeveel CPU, geheugen en schijf deze processen kunnen benutten.

Cloudcontainers zijn ontworpen om een enkele applicatie te virtualiseren. Ze creëren een afscherming op het niveau van de applicatie in plaats van de server. Dit betekent dat elke container maar één applicatie bevat. Hierdoor kunnen ontwikkelaars verschillende functies naar behoefte aanpassen, zonder dat dit invloed heeft op de hele applicatie.

In tegenstelling tot virtuele machines (VM's) hebben cloudcontainers geen volledig besturingssysteem en geen virtuele kopie van de hardware van de hostserver nodig. Ze virtualiseren het onderliggende besturingssysteem en laten gecontaineriseerde apps functioneren alsof ze een dedicated besturingssysteem voor zich alleen hebben, inclusief CPU, geheugen, bestandsopslag en netwerkverbindingen.

Hierdoor zijn containers kleiner, sneller en beter overdraagbaar dan VM's. Cloudcontainers kunnen vrijwel overal draaien. Deze overdraagbaarheid en consistentie tussen omgevingen maken containers tot een populaire keuze voor het implementeren en beheren van software in de cloud.

De definitie van een cloudcontainer

Een cloudcontainer is een opzichzelfstaand, uitvoerbaar pakket dat alles bevat wat nodig is om een stuk software uit te voeren, inclusief de code, een runtime, library’s, omgevingsvariabelen en systeemtools.

Containers zijn bedoeld om een consistente en efficiënte manier te bieden om applicaties in verschillende computeromgevingen te bundelen en uit te voeren, van een laptop van een ontwikkelaar tot een privé datacenter of een public cloud. Algemene kenmerken van cloudcontainers zijn:

  • Lichtgewicht: Containers delen het besturingssysteem van het hostsysteem, in tegenstelling tot virtuele machines (VM's) die een volledige kopie van een besturingssysteem vereisen. Hierdoor zijn containers lichter en starten ze sneller op dan VM's.
     
  • Overdraagbaar: Containers bevatten alles wat een applicatie nodig heeft om te draaien. Hierdoor zijn ze uitermate overdraagbaar tussen verschillende computeromgevingen.
     
  • Afgeschermd: Met containers worden CPU-, geheugen-, opslag- en netwerkbronnen op het niveau van het besturingssysteem gevirtualiseerd. Hierdoor ontstaat een afgeschermde omgeving waarin de applicatie kan draaien.
     
  • Schaalbaar en efficiënt: Containers kunnen eenvoudig opschalen of inkrimpen om aan de vraag te voldoen. Dit maakt ze geschikt voor toepassingen met variabele workloads. Containers kunnen resources delen, waardoor ze efficiënter zijn qua resourcesgebruik dan VM's.

Containers bieden consistentie tussen meerdere ontwikkel-, test- en productieomgevingen, waardoor het eenvoudiger is om applicaties te ontwikkelen en te implementeren.

Dat gezegd hebbende, containers zijn niet hetzelfde als virtuele machines. Dit zijn kenmerken die cloudcontainers niet hebben:

  • Volledig besturingssysteem: In tegenstelling tot VM's bevatten containers geen volledig hostbesturingssysteem. In plaats daarvan delen ze het besturingssysteem van de host. Containers virtualiseren in tegenstelling tot VM’s geen hardware. Ze virtualiseren alleen het besturingssysteem boven het hardwareniveau.
     
  • Sterke afscherming: Hoewel containers een mate van afscherming bieden, is dit niet zo sterk als de afscherming die VM's bieden. Als een applicatie sterke afscherming vereist om veiligheids- of andere redenen, is een VM wellicht een betere keuze.
     
  • Persistente opslag: Containers zijn bedoeld voor kortstondige activiteit. Dit betekent dat hun opslag niet blijft bestaan als ze worden gestopt. Alle data die persistent moet zijn, moet buiten de container opgeslagen worden.
     
  • Volledige systeemservices: Containers zijn ontworpen om één applicatie uit te voeren, dus ze bevatten niet de volledige systeemservices die een compleet besturingssysteem zou bieden.

Hoe werken cloudcontainers?

Cloudcontainers werken door het besturingssysteem (OS) te virtualiseren en een afgeschermde omgeving te bieden waarin applicaties kunnen worden uitgevoerd. Ze bundelen de applicatiecode en de bijbehorende afhankelijkheden, zoals specifieke versies van de runtimes van een programmeertaal, library’s en omgevingsvariabelen, in één uitvoerbare eenheid. Het proces van het maken en uitvoeren van een cloudcontainer omvat doorgaans de volgende stappen:

Icons/concept/Hardware/Hardware SSD Created with Sketch.

Images aanmaken

De containerimage wordt gemaakt op basis van een basisimage, wat een lichte versie van een besturingssysteem is. De applicatiecode en de bijbehorende afhankelijkheden worden aan dit basisimage toegevoegd. Het resulterende containerimage bevat alles wat de applicatie nodig heeft om te kunnen draaien.

Icons/concept/Component/Component Square Created with Sketch.

Runtime

De containerimage wordt uitgevoerd op een containerruntime. Dit is software die containers uitvoert en de levenscyclus van containers beheert. Voorbeelden van containerruntimes zijn Docker en containers.

Uitvoering

Wanneer de container wordt uitgevoerd, is deze afgeschermd van andere containers, ook al deelt deze het besturingssysteem van de host en, in sommige gevallen, de binaire bestanden en bibliotheken. Deze afscherming wordt gerealiseerd door namespaces en controlegroepen (cgroups) in Linux. Deze schermen de processen, het bestandssysteem en de netwerkstack van elke container af.

Icons/concept/Cloud/Cloud Hand Created with Sketch.

Orkestratie

Voor het managen van meerdere containers, vooral in een gedistribueerde omgeving zoals een cloud, worden tools voor containerorkestratie gebruikt, zoals Kubernetes. Deze tools regelen de implementatie, de schaalbaarheid, de netwerken en de beschikbaarheid van containers.

Een belangrijk punt is dat containers het besturingssysteem van de host delen, maar dat het voor de applicatie een afzonderlijk besturingssysteem lijkt. Dit wordt bereikt door de interfaces van het besturingssysteem van de host te abstraheren en deze aan de applicatie te presenteren alsof deze op een eigen besturingssysteem draait.

Wat zijn de voordelen van containers?

Cloudcontainers bieden verschillende voordelen, waardoor ze een aantrekkelijke keuze zijn voor het implementeren en beheren van applicaties. Dit zijn enkele van de belangrijkste voordelen:

Efficiency

Containers zijn lichtgewicht en delen de resources van het hostsysteem, waardoor meerdere containers op dezelfde host kunnen draaien zonder veel resources te verbruiken. Hierdoor is het mogelijk om meer applicaties op dezelfde hardware te draaien, wat kosten reduceert. Doordat ze lichtgewicht zijn, kunnen containers gemakkelijk worden opgeschaald of ingekrompen om aan de vraag te voldoen. Hierdoor zijn ze geschikt voor applicaties met variabele workloads.

Reactiviteit en productiviteit

Met containers kan men sneller bouwen, snellere onderhoudscycli realiseren en consistentie tussen omgevingen waarborgen. Dit kan leiden tot verbeterde reactiviteit en productiviteit. Hierdoor kunnen containers de levering van applicaties versnellen, dankzij de overdraagbaarheid en het implementatiegemak.

Betere beveiliging

Hoewel containers dezelfde host-kernel delen, wat een beveiligingsrisico kan vormen, kunnen containerspecifieke beveiligingsmaatregelen, zoals containerafscherming en netwerksegmentatie, dit risico beperken.

Eenvoudiger beheer

Containers kunnen makkelijker gemanaged worden dan traditionele virtual machines, vooral als u containerorkestratietools zoals Kubernetes gebruikt. Containers bieden een flexibele implementatie, waardoor bepaalde elementen op bare metal gehost kunnen worden en andere op virtual cloud-omgevingen geïmplementeerd kunnen worden.

Een belangrijk punt is dat containers het besturingssysteem van de host delen, maar dat het voor de applicatie een afzonderlijk besturingssysteem lijkt. Dit wordt bereikt door de interfaces van het besturingssysteem van de host te abstraheren en deze aan de applicatie te presenteren alsof deze op een eigen besturingssysteem draait.

Cloud containers versus VM’s

Cloudcontainers en virtual machines (VM's) zijn allebei technologieën die worden gebruikt om softwareapplicaties en hun dependency’s af te schermen, maar ze doen dat op verschillende manieren en bieden verschillende voor- en nadelen.

Zowel containers als VM's bieden een omgeving waarin applicaties afgeschermd van andere applicaties kunnen draaien, wat de beveiliging kan verbeteren en conflicten tussen verschillende applicaties of tussen applicaties en hun hostsysteem kan voorkomen.

Dat gezegd hebbende, containers delen het besturingssysteem van het hostsysteem, terwijl elke VM het besturingssysteem van zijn host uitvoert. Hierdoor zijn containers lichter en starten ze sneller op dan VM's, maar het betekent ook dat alle containers op een host hetzelfde besturingssysteem moeten gebruiken.

Omdat containers geen volledig besturingssysteem hoeven te draaien, gebruiken ze doorgaans minder systeembronnen (CPU, geheugen, opslag) dan VM's. Hierdoor kunnen meer containers op een bepaalde host draaien in vergelijking met VM's.

VM's bieden een sterkere afscherming dan containers, omdat ze op afzonderlijke besturingssystemen draaien. Daardoor kunnen VM's een betere keuze zijn voor applicaties die een hoge mate van beveiliging of afscherming vereisen.

Containers zijn overdraagbaarder dan VM's, omdat ze de applicatie en de afhankelijkheden ervan in één zelfstandige eenheid inkapselen. Hierdoor kan een container draaien op elk systeem waarop de juiste containerruntime is geïnstalleerd, ongeacht het onderliggende besturingssysteem

De keuze tussen containers en VM's hangt af van de specifieke behoeften van de applicatie en de infrastructuur. Containers zijn over het algemeen een goede keuze voor applicaties die licht, overdraagbaar en schaalbaar moeten zijn, terwijl VM's vaak beter geschikt zijn voor applicaties die sterke afscherming vereisen of op verschillende besturingssystemen moeten worden uitgevoerd.

Containers en virtual machines samen

Cloudcontainers en virtual machines (VM's) zijn allebei vormen van virtualisatietechnologie. Ze kunnen naast elkaar bestaan en samenwerken in een datacenter-omgeving, zelfs op dezelfde server. Ze gaan anders om met virtualisatie en dienen verschillende doelen, maar ze kunnen worden geïntegreerd om de gewenste resultaten voor een bedrijf te behalen.

Containers worden vaak gebruikt voor het implementeren van microservices, omdat ze afgeschermde omgevingen bieden die eenvoudig kunnen worden geschaald en onafhankelijk kunnen worden beheerd.

VM's en containers integreren

Een gebruikelijke manier om VM's en containers te integreren is om containers binnen een VM te draaien. Dit is mogelijk omdat een VM zijn besturingssysteem gebruikt, dat een containerengine zoals Docker kan ondersteunen en een serie containers binnen de VM-instance kan draaien.

Deze aanpak combineert de afschermings- en beveiligingsvoordelen van VM's met de overdraagbaarheid en efficiëntie van containers. Een andere aanpak is om VM's en containers naast elkaar te laten bestaan binnen dezelfde infrastructuur, georkestreerd door hetzelfde platform.

Hiermee kunnen alle soorten projecten worden gehost en vanuit één punt worden gemanaged. Het maakt een geleidelijke overstap mogelijk op basis van de huidige behoeften en mogelijkheden.

Samengevat: hoewel VM's en containers anders omgaan met virtualisatie, kunnen ze toch samen elkaar aanvullen om de sterke punten van beide technologieën te benutten. Dit kan bedrijven een flexibele, efficiënte en veilige omgeving bieden voor de implementatie en het beheer van hun workloads.

Cloudcontainerbeveiliging

Containerbeveiliging is een uiterst belangrijk aspect van moderne softwareontwikkeling en -implementatie. Het behelst het implementeren van veiligheidsmaatregelen gedurende de hele levenscyclus van een container, van development tot runtime. Hier zijn enkele belangrijke principes voor beveiliging van cloudcontainers:

Icons/concept/Cloud/Cloud Padlock Created with Sketch.

Beveilig de build-pipeline

Beveiliging moet worden geïntegreerd in de gehele ontwikkelcyclus van software (SDLC). Dit omvat het beveiligen van de build-pijplijn. Tot de best practices behoren onder andere het scannen van de code en de dependency’s om potentiële kwetsbaarheden vroeg in het ontwikkelproces te identificeren en in te dammen.

Icons/concept/Magnifying Glass/Magnifying Glass Check Created with Sketch.

Scan images op kwetsbaarheden

Scan regelmatig uw containerimages op kwetsbaarheden. Dit kan helpen bij het identificeren en oplossen van beveiligingsproblemen, voordat deze misbruikt kunnen worden.

Icons/concept/App/App Script Created with Sketch.

Reduceer het aanvalsoppervlak

Reduceer de componenten en services die in uw containers draaien tot het strikte minimum wat nodig is voor uw applicatie. Dit vermindert het aantal potentiële ingangen voor aanvallers.

Beperk containerbevoegdheden

Containers moeten precies de permissies krijgen die nodig zijn om hun functies uit te voeren en niets meer. Overmatig tolerante permissies kunnen tot beveiligingsrisico's leiden.

Implementeer toegangscontrole

Gebruik authenticatie- en autorisatiemechanismen om ervoor te zorgen dat alleen geautoriseerde gebruikers toegang hebben tot de containers. Dit helpt ongeoorloofde toegang en potentiële aanvallen te voorkomen.

Icons/concept/Component/Component Square Created with Sketch.

Runtime

De containerimage wordt uitgevoerd op een containerruntime. Dit is software die containers uitvoert en de levenscyclus van containers beheert. Voorbeelden van containerruntimes zijn Docker en containers.

Implementeer netwerkbeveiliging

Gebruik netwerkoplossingen voor containers om de beveiliging van uw applicatie te verhogen. Hiertoe behoren werkwijzen als het scheiden van netwerkverkeer en het implementeren van firewalls.

Houd altijd bij wat er in uw containers gebeurt. Dit kan helpen verdachte activiteiten te identificeren en sneller te reageren op mogelijke beveiligingsincidenten.

Containers: Gerelateerde producten

OVHcloud biedt een reeks services voor cloudcontainers die ontworpen zijn om bedrijven te helpen hun containerapplicaties te managen en te orkestreren. Managed Kubernetes Service is een gratis product waarmee gebruikers containers kunnen orkestreren met behulp van Kubernetes, een veelgebruikte tool voor containerorkestratie. Deze service is geschikt voor bedrijven van elke grootte en kan worden gebruikt om applicaties te implementeren, ze op te schalen en hun resilience te verbeteren, zelfs in hybride of multi-cloudinfrastructuren.

De Managed Kubernetes Service steunt op OVHcloud Public Cloud-instances en omvat ingebouwde OVHcloud Load Balancers en extra disks.

OVHcloud neemt de verantwoordelijkheid voor het implementeren, hosten en onderhouden van alle componenten die nodig zijn om Kubernetes te laten functioneren, inclusief updates en beveiligingspatches. Gebruikers kunnen een kubeconfig-bestand downloaden en alle functies van een gecertificeerde Kubernetes-administrator krijgen, zodat ze zich op hun bedrijf kunnen richten in plaats van op infrastructuurbeheer.

Orchestration

Managed Kubernetes Service

Orkestreer uw applicaties in containers met een Kubernetes-cluster dat CNCF gecertificeerd is.

Naast de Managed Kubernetes Service levert OVHcloud orkestratie- en industrialisatietools om acties zoals implementaties, onderhoud of opschalen tijdens piekbelastingen te automatiseren.

Deze tools helpen processen en software-stacks te managen, ongeacht of ze gevirtualiseerd of gecontaineriseerd zijn. De orkestratieoplossingen van OVHcloud omvatten een CNCF-gecertificeerd Kubernetes-cluster, een repository voor Docker-images of Helm-charts en de mogelijkheid om variaties in activiteit te managen door verkeer over meerdere resources te verdelen.

Cloud-interface

Innoveer sneller met cloud-automatiseringstools

Een cloud-platform levert niet alleen on demand computing resources die met het netwerk verbonden zijn, maar ook flexibele opslag. Het biedt tevens tools om acties uit te voeren en te automatiseren, zoals implementaties, onderhoud en opschalen tijdens verkeerspieken.
De onderstaande tools en services helpen u uw processen en software-stacks beter te managen, ongeacht of deze gevirtualiseerd of gecontaineriseerd zijn.