Archives par mot-clé : kubernetes

K3OS, Proxmox et cloud-init

Rapide tutoriel pour install K3OS sur Proxmox et avoir une configuration basique cloud-init.

Pourquoi?

K3OS est le remplaçant de rancherOS avec une base de k3s et une automatisation de sa maintenance, idéal pour du self-hosted.

Proxmox est un virtualiseur léger et puissant.

Sauf que K3OS de base à 2 défauts,

  • un clavier US uniquement
  • une connexion ssh par clef uniquement, bien, mais très limitatif quand on a que noVNC et sans copier-coller…

La solution

  1. créer votre vm classique avec l’image iso K3OS sans la démarrer.
  2. Dans la section matériel, ajouter un lecteur cloud-init
  3. dans la section cloud-init maintenant accessible, configurer l’utilisateur à « rancher » et SSH clé public avec votre clé.

démarrez en mode live-cd.

Attention le clavier est en Qwerty, donc regardez un mapping sur internet pour les touches dont vous avez besoins.

  1. connectez-vous avec le compte rancher sans mot de passe (entrer).
  2. créez un répertoire cd : mkdir /home/rancher/cd
  3. monter le cdrom: mount /dev/cdrom /home/rancher/cd
  4. lancez l’installation: sudo k3os install
  5. à l’étape cloud-init, dîtes yes, puis en path /home/rancher/cd/user-data
  6. finissez l’installation
  7. sur votre poste configurez votre ~/.ssh/config avec par exemple:
Host k3os
 HostName 192.168.1.XX
 User rancher
 PreferredAuthentications publickey
 IdentityFile /Users/moi/mnt/p/.ssh/id_ed25519

au reboot:

ssh k3os

Et voilà!

P.S.: vous pouvez enlevez les volumes cloud-init ensuite.

Certificat Let’s Encrypt sur réseau local

On peut lire un peu partout qu’il n’est pas possible d’utiliser Let’s Encrypt sur son réseau privé. Cette assertion est trop rapide. C’est compliqué, pas supporté par défaut, mais amplement faisable.

Une solution consiste à utiliser les fonctions de challenge DNS de Let’s Encrypt et de récupérer et installer en local ces certificats.

Si l’on souhaite cacher l’architecture interne de notre infrastructure (sans la déclarer dans dans un dns public), il suffit simplement d’utiliser un wildcard de sous-domaine.

Le flux d’action, réseau privé / internet, est le suivant:

Pour fonctionner, cette procédure nécessite un serveur DNS public avec une api permettant de mettre à jour vos enregistrement DNS. Vous trouverez de tels services auprès par exemple de DigitalOcean, Namecheap.

Exemple avec un serveur DNS namecheap

dans un répertoire de votre serveur possédant docker (ou directement avec certbot et python), par exemple /data/certs

git clone https://github.com/heralight/certbot_dns_namecheap.git

créer le fichier namecheap.ini dans /data/certs

dans /data/certs/certbot_dns_namecheap

docker-compose run certbot-dns-namecheap  certonly \
  --non-interactive  -a certbot-dns-namecheap:dns-namecheap \
  --certbot-dns-namecheap:dns-namecheap-credentials=/namecheap.ini \
  --agree-tos \
  --email "[email protected]" \
  -d *.mondomain.com

les certificats se trouvent dans /data/certs/certbot_dns_namecheap/out/certs/live/mondomain.com/

listes des certificats Let’s Encrypt certbot

docker-compose run  certbot-dns-namecheap  certificates  

renouvellement des certificats Let’s Encrypt certbot

Les certificats Let’s Encrypt ont une durée de validité courte, il vous faut les renouveler périodiquement.

docker-compose run  certbot-dns-namecheap  renew --force-renewal

dans un crontab ajouter -T en option pour éviter les problèmes. ex: docker-compose run -T …etc

Ensuite, à vous de configurer ou transférer (avec rsync, etcd ou consul par exemple) ces certificats ou bon vous semble.

Exemple – Lier Ingress avec ces certificats

Ci-après, un exemple d’utilisation pour un cluster Kubernetes avec une sur couche Rancher 2. Ingress va automatiquement utiliser vos certificats générés pour vos services exposés sur votre infrastructure.

Première étape, créer le secret contenant les certificats pour ingress.

kubectl -n devops-tools create secret tls tls-rancher-ingress \   --cert=/data/certs/certbot_dns_namecheap/out/certs/live/mondomain.com/cert.pem \   --key=/data/certs/certbot_dns_namecheap/out/certs/live/mondomain.com/privkey.pem

Ensuite automatiser la mise à jour avec crontab.

43 6 * * * cd /data/certs/certbot_dns_namecheap && /usr/local/bin/docker-compose run -T  certbot-dns-namecheap  renew --post-hook "kubectl -n devops-tools create secret tls tls-rancher-ingress    --cert=/data/certs/certbot_dns_namecheap/out/certs/live/mondomain.com/cert.pem   --key=/data/certs/certbot_dns_namecheap/out/certs/live/mondomain.com/privkey.pem --dry-run -o yaml |    kubectl apply -f - "

En conclusion, pas simple, mais faisable.

Pour information, l’api de Namecheap est disponible uniquement sur demande et sous condition d’avoir beaucoup de leur produit, mais à l’énorme avantage d’être compatible avec des domaines plus exotique, … comme les domaines islandais.