hoortrend.com

Comprendre le portfolio

Understanding the portfolio

Comment ça marche, et pourquoi c'est construit ainsi.

How it works, and why it is built this way.

Trois questions, trois schémas : comment le portfolio arrive jusqu'à votre navigateur, ce qu'il lit dans le cluster, et pourquoi son bac à sable vit dans un namespace à part. Tout ce qui est montré ici est la configuration réelle.

Three questions, three diagrams: how the portfolio reaches your browser, what it reads in the cluster, and why its sandbox lives in a namespace of its own. Everything shown here is the real configuration.

  1. 01Comment on y accèdeHow you reach it
  2. 02Ce qu'il litWhat it reads
  3. 03Pourquoi un namespace dédiéWhy a dedicated namespace
  4. 04Anatomie d'un « tuer un pod »Anatomy of a “kill a pod”
01

Comment on y accède depuis Internet

How you reach it from the Internet

Cliquez sur une étape pour voir ce qui s'allume dans le schéma, puis interrogez vraiment le portfolio.

Click a step to see what lights up in the diagram, then really query the portfolio.

Chemin d'une requête vers portfolio.ilyes-litim.fr worker1 namespace portfolio master1 navigateurvous DNS cert-manager ingress-nginx:443 · TLS Serviceportfolio-web pod webportfolio-web pod webportfolio-web ServiceAccount : lecture seule API Kubernetes

Le test appelle l'API publique du portfolio depuis votre navigateur (lecture seule, autorisée pour ce site uniquement). Le nom du pod vient de la réponse.

The test calls the portfolio's public API from your browser (read-only, allowed for this site only). The pod name comes from the response.

02

Ce que le portfolio lit

What the portfolio reads

Le site est vivant : chaque chiffre vient du cluster, jamais d'un fichier figé. Mais il ne lit que ce qu'on lui a explicitement accordé.

The site is alive: every number comes from the cluster, never from a frozen file. But it only reads what it was explicitly granted.

L'API Kubernetes

The Kubernetes API

Nœuds, pods, événements, Deployments, Ingress : le pod appelle l'API avec le jeton de son ServiceAccount. Ce compte ne peut que lister. Il n'a jamais accès aux Secrets, ni à exec.

Nodes, pods, events, Deployments, Ingresses: the pod calls the API with its ServiceAccount token. That account can only list. It never has access to Secrets, nor to exec.

Prometheus

Les courbes de CPU et de mémoire viennent de Prometheus, interrogé en HTTP à l'intérieur du cluster. Aucune donnée n'est stockée par le portfolio.

The CPU and memory curves come from Prometheus, queried over HTTP inside the cluster. The portfolio stores no data.

Un cache court

A short cache

Les réponses sont gardées quelques secondes. Cent visiteurs ne font donc pas cent appels à l'API Kubernetes : le cluster est protégé par le site.

Responses are kept for a few seconds. A hundred visitors do not make a hundred calls to the Kubernetes API: the site protects the cluster.

RessourceResourceDroit accordéPermission grantedPortéeScope
nodes, pods, events, PVClisttout le cluster (ClusterRole)whole cluster (ClusterRole)
deployments, daemonsets, statefulsets, ingresseslisttout le cluster (ClusterRole)whole cluster (ClusterRole)
services, PDB, roleslistnamespace portfolio seulementnamespace portfolio only
Secrets, ConfigMaps, pods/execaucunnonenulle partnowhere
03

Pourquoi le bac à sable a son propre namespace

Why the sandbox has its own namespace

Les visiteurs peuvent y tuer des pods, les faire planter, les saturer en mémoire. Cette liberté n'est possible que parce que tout est enfermé dans un namespace. Quatre raisons : cliquez-en une pour voir ce qu'elle protège.

Visitors can kill pods there, crash them, exhaust their memory. That freedom is only possible because everything is fenced inside a namespace. Four reasons: click one to see what it protects.

Le namespace portfolio, le namespace playground et les autres namespaces du cluster namespace portfolio le vrai site portfolio-webréplique 1 portfolio-webréplique 2 ServiceAccount portfolio-weble « badge » du site auprès de l'API namespace playground le terrain de jeu des visiteurs play-apppod play-apppod Quota : 8 pods · 300 m CPU · 256 Mi Pod Security « restricted » imposé NetworkPolicy : entrée 8080, sortie nulle RBACplayground-operator :8080 ✕ autres namespaces landinghoortrend.com monitoringPrometheus, Grafana kube-systemle cœur du cluster external-hostsGitLab, Zabbix gitlab-runnerla CI defaultdemo-app 403 Forbidden : aucun droit ici Vert : autorisé · Rouge : refusé · Les droits ci-dessus sont ceux mesurés avec kubectl auth can-i.

Essayez : que peut faire le portfolio, et où ?

Try it: what can the portfolio do, and where?

Résultats réels de kubectl auth can-i … --as=system:serviceaccount:portfolio:portfolio-web, mesurés le 17 octobre 2026.

Real results of kubectl auth can-i … --as=system:serviceaccount:portfolio:portfolio-web, measured on 17 October 2026.

Et si le bac à sable était dans le namespace portfolio ?

  • Le droit « supprimer des pods » s'appliquerait au vrai site : un clic de trop et il tombe.
  • Le quota qui borne les dégâts limiterait aussi le site lui-même.
  • Interdire toute sortie réseau empêcherait le site d'appeler l'API Kubernetes et Prometheus.
  • Imposer « restricted » et tout réinitialiser obligerait à toucher au site en production.

What if the sandbox lived in the portfolio namespace?

  • The “delete pods” permission would apply to the real site: one click too many and it goes down.
  • The quota that bounds the damage would also cap the site itself.
  • Forbidding all network egress would stop the site from calling the Kubernetes API and Prometheus.
  • Enforcing “restricted” and resetting everything would mean touching the production site.

Dans un namespace dédié

  • Les droits d'action sont donnés ici et nulle part ailleurs.
  • Quota, réseau et sécurité sont réglés pour le pire visiteur, sans gêner le site.
  • On peut tout supprimer et recréer sans que le portfolio s'en aperçoive.

In a dedicated namespace

  • Action permissions are granted here and nowhere else.
  • Quota, network and security are tuned for the worst visitor, without hampering the site.
  • Everything can be deleted and recreated without the portfolio noticing.
04

Anatomie d'un « tuer un pod »

Anatomy of a “kill a pod”

Ce qui se passe, dans l'ordre, quand un visiteur clique sur « kill » dans le bac à sable. Deux couches de protection se complètent : le code du site, puis les droits Kubernetes.

What happens, in order, when a visitor clicks “kill” in the sandbox. Two layers of protection complement each other: the site's code, then Kubernetes permissions.

De l'action du visiteur au pod remplaçant visiteurclic « kill » portfolio-webgarde-fous du code API Kubernetesvérifie le RBAC pod play-appSIGTERM · retiré ReplicaSet« il en manque un » nouveau poddémarresonde /healthz Servicetrafic renvoyé Garde-fou 1 (code) : action autorisée, nom de pod conforme, 45 actions/min. Garde-fou 2 (Kubernetes) : le Role n'existe que dans playground.

Essayer dans le Playground →Try it in the Playground →