Uitwerking
1.1 Google Cloud & GKE - Voltooide Badges
Voltooide badges via Google Skills:
1.2 Kubernetes
Opdracht 1 - Cluster Installatie
De opdracht specificeert Ubuntu 24.04 LTS minimal. Ik heb Ubuntu 25.10 LTS minimal gebruikt.
Ubuntu 25.10 komt standaard met sudo-rs (een Rust-herimplementatie van sudo) versie 0.2.8. Deze versie heeft een bekende sessiebug - sudo reboot mislukt met een onverwachte fout. Opgelost via een GCP-opstartscript dat klassieke sudo installeert bij elke opstart.



Gebruikte instanties:
| Node | Naam | Zone | Type | OS |
|---|---|---|---|---|
| Master | master-amsterdam | europe-west4-a (Nederland) | e2-medium | Ubuntu 25.10 LTS minimal |
| Worker 1 | worker-brussels | europe-west1-b (België) | e2-medium | Ubuntu 25.10 LTS minimal |
| Worker 2 | worker-london | europe-west2-b (Verenigd Koninkrijk) | e2-medium | Ubuntu 25.10 LTS minimal |


Het cluster is geïnstalleerd met twee shell-scripts: configure_master.sh voor de masternode en configure_worker.sh voor de workernodes. Deze scripts automatiseren kernelmoduleconfiguratie, containerd installeren, Kubernetes-pakketinstallatie (v1.35) en clusterinitialisatie.



Uitleg van kubeadm init:
kubeadm init zet het Kubernetes-besturingsvlak op de masternode. Het genereert TLS-certificaten, schrijft kubeconfig-bestanden, maakt statische Pod-manifesten aan voor kerncomponenten (kube-apiserver, kube-controller-manager, kube-scheduler, etcd) en genereert een bootstrap-token voor workernodes.
Uitleg van kubectl apply -f kube-flannel.yml:
Installeert Flannel als CNI-plugin. Flannel maakt een VXLAN overlay-netwerk dat elke pod een uniek IP geeft, zodat pods op verschillende nodes direct communiceren. De CIDR 10.244.0.0/16 moet overeenkomen met de --pod-network-cidr van kubeadm init.
Andere netwerk-CNIs:
| CNI | Beschrijving |
|---|---|
| Flannel | Eenvoudig L3 overlay-netwerk via VXLAN. Geen netwerkbeleidsondersteuning. |
| Calico | BGP-routing met volledige NetworkPolicy-ondersteuning. Veel gebruikt in productie. |
| Cilium | eBPF-gebaseerde CNI met geavanceerde observeerbaarheid en beveiliging. |
| Weave Net | Mesh overlay-netwerk, eenvoudige installatie, ondersteunt NetworkPolicy. |
| Canal | Combineert Flannel (networking) met Calico (netwerkbeleid). |
1a - kubectl get nodes:
NAME STATUS ROLES AGE VERSION
worker-brussels Ready <none> 14m v1.35.1
worker-london Ready <none> 7m v1.35.1
master-amsterdam Ready control-plane 17m v1.35.1

Verklaring van de kube-system pods:
| Pod | Rol |
|---|---|
kube-apiserver | Front-end van het besturingsvlak. Alle kubectl-commando’s en interne componenten lopen via deze REST API. Alleen op de master. |
kube-controller-manager | Voert alle controller-loops uit: juiste aantal pod-replica’s, node-levenscycli, certificaatrotatie. Alleen op master. |
kube-scheduler | Bewaakt niet-ingeplande pods en wijst ze toe aan een geschikte node. Alleen op master. |
etcd | Gedistribueerde sleutel-waardeopslag met de volledige clusterstatus. Alleen op master. |
kube-proxy | Beheert iptables/nftables-regels zodat Service-IPs correct naar pods routeren. Eén pod per node. |
coredns | Cluster-interne DNS. Twee replica’s voor redundantie. |
Opdracht 2 - Gecontaineriseerde Applicatie
Dockerfile: (bekijk op GitHub)
- Alpine-variant bewust gekozen: ~5 MB vs ~180 MB Debian, kleiner aanvalsoppervlak.
- Kopieert de website naar de nginx-documentroot.
- Start nginx op de voorgrond zodat de container actief blijft.
GitHub Actions workflow:
De workflow (ci_week1.yml) bouwt en pusht het image als stensel8/public-cloud-concepts:latest bij elke push naar main.
deployment.yaml: (bekijk op GitHub)
2b - Pod-IPs:
NAME IP NODE
first-deployment-5ffbd9444c-5hkzs 10.244.2.2 worker-london
first-deployment-5ffbd9444c-s4xdb 10.244.1.2 worker-brussels


De respons bevestigt dat de nginx-container draait en de statische site serveert via het interne Flannel-IP. Externe toegang vereist een Kubernetes Service (Week 2).