Renseignez le domaine de votre plateforme et votre namespace : les commandes et les manifestes de la page s'adaptent. Les valeurs restent dans votre navigateur.
01Choisir un nom
Tout nom sous demo.k8s.exemple.fr placé dans un Ingress est créé
automatiquement dans le DNS. Une convention évite les collisions entre équipes :
<application>-<équipe>.demo.k8s.exemple.fr boutique-mon-equipe.demo.k8s.exemple.fr api-boutique-mon-equipe.demo.k8s.exemple.fr
Deux Ingress qui revendiquent le même nom se marchent sur les pieds : Traefik ne sait plus
lequel servir, et le certificat de l'un peut écraser celui de l'autre. En cas de doute, un
dig +short sur le nom avant de le choisir : une réponse veut dire qu'il est
pris.
02Le certificat, sans rien faire
L'annotation cert-manager.io/cluster-issuer: letsencrypt et le bloc
tls de l'Ingress suffisent. cert-manager prouve à Let's Encrypt que le nom vous
appartient en publiant un fichier temporaire, obtient le certificat, le range dans le secret
nommé par secretName, et le renouvelle un mois avant l'échéance.
kubectl get certificate kubectl describe certificate hello-tls # en cas d'attente prolongée kubectl get challenges # les défis en cours, s'il y en a
Let's Encrypt limite le nombre de certificats par nom et par semaine. Un Ingress supprimé et recréé en boucle pendant un après-midi de tests peut atteindre la limite. Gardez le même secretName : le certificat existant est réutilisé tant qu'il est valide.
03Le domaine d'un client
Pour servir www.client.fr, deux étapes :
- Chez le registraire du client, un enregistrement
CNAMEdewww.client.frvers le nom de l'application sur la plateforme. - Le nom du client ajouté dans l'Ingress, dans
tls.hostset dans une règle.
www.client.fr. 3600 IN CNAME boutique-mon-equipe.demo.k8s.exemple.fr.
spec:
tls:
- hosts: [www.client.fr, boutique-mon-equipe.demo.k8s.exemple.fr]
secretName: boutique-tls
rules:
- host: www.client.fr
http: { paths: [ { path: /, pathType: Prefix,
backend: { service: { name: boutique, port: { number: 80 } } } } ] }
Le certificat sera émis dès que le CNAME répond. Un domaine nu, sans www, ne
peut pas porter de CNAME : on utilise alors un enregistrement A vers
203.0.113.47, en sachant qu'il faudra le modifier si l'adresse de la plateforme change un
jour.
04CrowdSec, déjà en place
CrowdSec analyse les journaux de l'entrée HTTP de la plateforme, repère les scanners, les tentatives de force brute et les chemins connus des outils d'attaque, et bloque les adresses concernées, ainsi que celles signalées par la communauté CrowdSec. La protection est activée au niveau de la plateforme : vous n'avez rien à ajouter à vos Ingress.
Contrepartie : si vous lancez un outil d'audit agressif contre votre propre application, c'est votre adresse qui sera bannie. Prévenez l'administrateur avant de jouer au pirate ; il peut lever un blocage en une commande.
05L'IP réelle des visiteurs
La plateforme conserve l'adresse d'origine des visiteurs jusqu'à Traefik, qui la transmet à
votre application dans l'en-tête X-Forwarded-For. Pour vos journaux et vos
limitations de débit, faites confiance à cet en-tête quand la requête vient du réseau interne
du cluster, et à lui seul : un en-tête ajouté par le visiteur lui-même ne prouve rien.
Vous codez, nous veillons sur le cluster
Cette plateforme existe pour que vos développeurs déploient sans attendre personne et sans ticket. Nous l'hébergeons et l'exploitons pour vous : réseau, certificats, sauvegardes, mises à jour et surveillance des attaques. Il vous reste le plus intéressant.