Talos Linux : l'OS sans SSH


Quand j’ai découvert Talos Linux, ma première réaction a été : “Attends, y’a pas de SSH ?”. Et oui, c’est exactement ça. Et c’est le but.

C’est quoi Talos ?

Talos Linux c’est un OS minimaliste conçu uniquement pour faire tourner Kubernetes. Pas de shell, pas de SSH, pas de package manager. Tout se fait via une API.

L’idée c’est : si tout passe par l’API, tu peux pas faire de modifications manuelles qui créent du drift. Ta config est 100% déclarative et reproductible.

Pourquoi j’ai choisi Talos

Plusieurs raisons :

  1. Immutable : Le système de fichiers est en lecture seule. Pas de “j’ai oublié ce que j’ai installé”
  2. Sécurisé : Pas de shell = surface d’attaque réduite
  3. Boot rapide : ~45 secondes du POST au cluster ready
  4. Kubernetes-native : C’est fait pour ça, pas adapté après coup

L’installation

L’installation via iDRAC c’était smooth. Télécharger l’ISO Talos, le monter en Virtual Media, booter dessus.

Le serveur boot en mode maintenance avec une IP DHCP. À partir de là, tout se fait avec talosctl depuis mon Mac.

# Générer la config
talosctl gen config mon-cluster https://192.168.1.100:6443

# Appliquer la config au node
talosctl apply-config --insecure \
  --nodes 192.168.1.50 \
  --file controlplane.yaml

Le serveur reboot, installe Talos sur le disque, et revient avec l’IP statique configurée.

Le choc culturel

Les premiers jours, c’était bizarre. T’as un problème ? T’as l’habitude de faire ssh root@server et de regarder les logs. Avec Talos, c’est :

# Voir les logs
talosctl -n 192.168.1.100 logs kubelet

# Voir les services
talosctl -n 192.168.1.100 services

# Voir dmesg
talosctl -n 192.168.1.100 dmesg

Au début tu te sens perdu. Après tu te rends compte que t’as accès à tout ce dont t’as besoin, juste pas de la manière habituelle.

Les galères

Le réseau

Ma première config réseau marchait pas. J’avais oublié de mettre le bon gateway. Résultat : le node était inaccessible après le reboot.

Heureusement, via la console iDRAC, j’ai pu voir que Talos affichait son IP. J’ai pu corriger et réappliquer la config.

Le registry local

Je voulais un registry Docker local en HTTP (pas HTTPS). Par défaut, Talos refuse de pull depuis des registries non-sécurisés.

Il faut ajouter ça dans la config :

machine:
  registries:
    config:
      192.168.1.100:30500:
        tls:
          insecureSkipVerify: true

J’ai passé une heure à comprendre pourquoi mes images se pullaient pas.

Ce que j’ai appris

  1. Lire la doc. La doc Talos est excellente. Faut juste prendre le temps de la lire.

  2. Garder l’accès console. L’iDRAC c’est ton filet de sécurité. Si tu perds l’accès réseau, t’as toujours la console.

  3. Versionner ta config. Ta config Talos, c’est ton infrastructure as code. Mets-la dans Git.

  4. C’est pas si compliqué. Une fois que t’as compris le modèle mental, ça devient naturel.

La config finale

Ma config Talos ressemble à ça :

machine:
  network:
    hostname: r430-k8s-master
    interfaces:
      - interface: eth0
        addresses:
          - 192.168.1.100/24
        routes:
          - network: 0.0.0.0/0
            gateway: 192.168.1.1
    nameservers:
      - 8.8.8.8
      - 1.1.1.1
  
  install:
    disk: /dev/sda
    bootloader: true
    wipe: true

cluster:
  network:
    cni:
      name: flannel
    podSubnets:
      - 10.244.0.0/16
    serviceSubnets:
      - 10.96.0.0/12

Simple, déclaratif, reproductible.


Prochain article : Bootstrap Kubernetes - premier cluster, premiers pods.