Zodra je met cloud native technologieën of Kubernetes start, is er een continu groeiend landschap van tools en projecten om te gebruiken. (True is zelf ook onderdeel van dit landschap 😉) Het landschap is zacht gezegd … overweldigd. Waar kun je beginnen? CNCF heeft daar een trail map voor gemaakt, een aanbevolen proces om cloud native technologieën in te zetten. Waar de reis naar cloud native voor elke organisatie uniek is, zijn er wel patronen en momenten waar elke organisatie mee te maken krijgt.
Direct weten wat de aanvulling van de Kubernauts van True is? Je leest het hier.
1. Containerisation
Uiteraard begint je reis met containerisatie van je app. De standaard daarvoor is Docker. Containers zijn efficiënt, lichtgewicht en makkelijk te verplaatsen. Elk type en formaat applicatie kan theoretisch in containers komen. Een best practice voor de toekomst van je cloud native app: splits je app waar mogelijk in meerdere delen en bouw toekomstige functionaliteiten in microservices.
2. Continuous Integration en Continuous Delivery (CI/CD)
Top, je app zit in containers! De trailmap van CNCF gaat vervolgens in op CI/CD, waarbij Kubernetes als een standaard keuze voor orkestratie van containers wordt genomen. Dat hoeft echter niet, waardoor je in dat geval eerst bij punt 3. Orchestration & application definition komt, en dan pas bij deze stap.
Na containerisatie (en orkestratie) zet je een CI/CD pipeline op. Deze pipeline zorgt ervoor dat wijzigingen en commits in je source code (automatisch) leiden tot nieuwe gebouwde containers, die getest worden, en vervolgens (automatisch) gedeployed naar een staging-omgeving en mogelijk naar productie-omgeving. Een goede set-up automatiseert uitrollen naar een volgende versie, terugzetten naar een volgende versie en testen. Start je net met CI/CD? Begin met bouwen en testen, je hoeft nog niet naar productie te gaan. Maak jezelf vertrouwd met het proces, de resultaten daarvan, en tweak het waar nodig.
Voor CD is onze favoriete tool ArgoCD. Het is een GitOps-tool voor Continuous Delivery. De application controller in ArgoCD monitort je applicaties en vergelijkt de livestatus met de gewenste doelstatus uit je Git repo. Wijkt de livestatus af, dan geeft ArgoCD dat mee en biedt het faciliteiten om de live status automatisch of handmatig terug te synchroniseren naar de gewenste doelstatus.
3. Orchestration & application definition
Na je containers kijk je naar het beheer van je containers. Op welk platform moeten je deployments landen? Hoe beheer je je containers en hun life cycle? Hoe zorg je dat je applicatie op- en afschaalt en niet te veel resources gebruikt? Kubernetes is het standaardplatform voor container orkestratie. Vervolgens helpen Helm charts je met definiëren, installeren en upgraden van zelfs de meest complexe Kubernetes applicatie.
PaaS is de evolutie van IaaS als het aankomt op flexibiliteit. Managed hosting providers bieden PaaS aan als platform met computing en software resources waarbij je minimaal of zelfs geen infrastructuur zelf hoeft te beheren. Je partner zorgt voor beheer en onderhoud van de (virtuele) servers, het OS, netwerk infrastructuur, middleware en software configuraties. Daarmee heb je als ontwikkelaar je handen meer vrij om je applicaties te ontwikkelen en deployen. De services gaan uit van massa-standaardisatie; een managed service provider (‘managed PaaS’) regelt de inrichting compleet op maat voor je bedrijfsapplicaties of software.
4. Observability & analysis
Wat speelt er in je applicatie? Om daar goed zicht op te hebben en te houden, zijn monitoring en logging een cruciaal onderdeel van je cloud-omgeving. Deze data geeft je informatie om je applicaties efficiënter (door) te ontwikkelen, om te zorgen voor gezonde applicaties en om te voldoen aan Service Level Objectives (SLO’s). Onze favoriete monitoringstool is Prometheus, vaak gebruikt met Grafana voor een visueel dashboard en met Kuberhealty.
5. Service proxy, discovery & mesh
Met containeriseren, orkestreren en observeren worden je cloud native applicatie en (micro) services complexer. Om alles in goede banen te leiden, heb je tools nodig voor communicatie tussen services onderling, zoals discovery, routing, testing en access control. Een service mesh is een abstractielaag om deze complexiteit te verminderen, de weerbaarheid van de applicatie te verhogen en om verkeer te beheren.
CoreDNS gebruik je voor service discovery en Linkerd is onze favoriete tool voor service mesh.
6. Networking, Policy & Security
Een cloud native applicatie vereist communicatie tussen verschillende onderliggende services of componenten, om bijvoorbeeld een request af te handelen of om data te verwerken. Met software-defined networking (SDN) kun je het netwerk beheren en onderhouden met programmeerbare API’s. Er zijn verschillende container networking solutions, die allemaal aansluiten op de Container Network Interface (CNI). Hiervoor kun je tools als Calico, Cilium of Weave Net gebruiken. Deze network tooling kun je gebruiken om inzicht te krijgen in netwerk-verkeer binnen het cluster; om het verkeer aan de hand van policies te leiden; en om verkeer te beveiligen via mTLS (mutual TLS, een tweezijdige vorm van versleuteld verkeer).
Verderop in je cloud native reis kun je mogelijkheden instellen om verkeer van en naar je applicatie te beperken. Micro-segmentatie is een voorbeeld om zero-trust security in te stellen. Dat betekent wel dat je de CNI tool die je gebruikt, volledig moet doorgronden.
7. Distributed database & storage
Het model van cloud native is stateless: containers moeten zichzelf kunnen herstarten en beschikken alleen over tijdelijke opslag, gedurende de lifetime. Dat betekent dat je op een andere manier met vaststaande data, zoals data in een database of opslag van afbeeldingen, moet omgaan. Vanuit True adviseren we storage buiten Kubernetes, aangezien daar volwassen en door de community gedragen oplossingen voor zijn.
8. Streaming & messaging
Heb je microservice applicaties in je omgeving draaien, dan zullen deze binnen en tussen omgevingen met elkaar moeten communiceren. Daarvoor wordt vaak de JSON-REST API gebruikt, vanwege de relatief eenvoudigheid en de mogelijkheden voor schaalbaarheid.
Ga je voor een hogere performance of heb je honderden microservices voor je applicaties? Dan kun je met gRPS of NATS aan de slag. gRPS is een open source RPC framework, ontwikkeld door Google. NATS is een open source messaging system voor cloud native applicaties, IoT messaging en microservices architecturen, waarbij je beschikt over publisher/subscriber, load-balancing en andere messaging functionaliteiten.
9. Container registry & runtime
Een container registry is een centrale plek om container images op te slaan en te managen. Het is essentieel om hier de juiste tool voor te kiezen, inclusief performance en access control. Runtime is een software-laag die verantwoordelijk is om je containers te draaien. Als je je applicatie containeriseert, begin je vaak met containerd. Naast containerd is Harbor de bekendste container registry. Let op: Docker runtime wordt vanaf Kubernetes versie 1.24 niet meer ondersteund.
10. Software distribution
Met het groeiend aantal digitale bedreigingen, en daarmee het groeiende belang van (data) security, moet je de hele keten van container images beveiligen. Dat gaat verder dan een container image cryptografisch signen, waarmee je het gebruik van een specifieke container image precies kunt verifiëren. Als voorbeeld: alleen images signed door een specifieke partij mogen gedeployed worden.
The Update Framework (TUF) en Notary zijn projecten van CNCF die dit bieden. Notary is een tool om betrouwbare content te beheren, waarbij uitgevers digitaal de content kunnen ondertekenen en waarbij consumenten de integriteit en origine van deze content kunnen verifiëren. Notary gebruikt daarvoor The Update Framework.
11. Het missende onderdeel: nog meer (stateless) security!
Security is een onderdeel bij 6. Networking, Policy & Security en bij 10. Software distribution. Alleen: hoe sla je wachtwoorden en andere gevoelige data op, op een manier die bij stateless containers past?
Binnen Kubernetes worden Secrets gebruikt om gevoelige informatie zoals wachtwoorden centraal op te slaan. Standaard staan ze unencrypted opgeslagen in etcd. Zodra de Secret in een container is geïnjecteerd, ziet de container de data uit de secret als plain text. Behoorlijk onveilig! Belangrijk is dat je omgeving beschikt over een oplossing met sterke encryptie voor Secrets. In onze blog over Secrets Management lees je hier meer over.
Samen met een partner met cloud native technologieën aan de slag?
Steeds meer ontwikkelteams verkennen containerisatie. Het levert veel voordelen op, maar kan ook complex zijn. Fully Managed Kubernetes van True helpt ontwikkelteams met meer efficiëntie en zorgvuldigheid te ontwikkelen.