Aller au contenu principal

Créer un certificat SSL pour mon KaaS

Introduction

Dans ce guide, nous allons vous expliquer comment créer un certificat SSL pour votre Kubernetes as a Service (KaaS) afin de sécuriser les communications entre votre cluster et les clients.

Imaginons que vous avez un domaine personnalisé, comme 'example.com', dont la zone DNS est gérée par OVH (par exemple). Vous souhaitez qu'une de vos application de votre cluster KaaS soit accessible via 'foo.example.com' et que les communications soient sécurisées avec un certificat SSL.

Étape 1 : Générer un cert issuer

Prérequis :

  1. Vous devez avoir un jeu de clés de l'API de votre gestionnaire de zone DNS pour pouvoir créer un cert issuer.
  2. Vous devez avoir déployé un service qui porte votre application dans votre cluster KaaS.

Pour générer un cert issuer, allez dans la console, identifiez vous, puis choisissez parmi vos services le service kubernetes pour lequel vous souhaitez créer un certificat SSL.

Une fois dans la page de votre service, cliquez sur l'onglet "Ingress", et vers le bas de la page vous trouverez la section "Emetteurs de certificats". Si ce n'est pas votre premier émetteur, vous verrez la liste de vos cert issuers déjà créés. Sinon, vous verrez un message indiquant que vous n'avez pas encore d'émetteur de certificat configuré.

Emetteurs de certificats

Cliquez sur le bouton "Ajouter un émetteur" pour commencer le processus de création.

Ajouter un émetteur

Renseignez les champs ainsi :

  • Nom : Choisissez un nom pour votre cert issuer, par exemple "ovh-dns-issuer".
  • Fournisseur : Choisissez votre fournisseur de DNS dans la liste, par exemple "OVH".
  • Région : Choisissez la région de votre fournisseur de DNS, par exemple "ovh-eu".
  • Clé d'Application : Renseignez la l'Application Key de votre API DNS.
  • Secret d'Application : Renseignez l'Application Secret de votre API
  • Clé Consommateur d'Application : Renseignez l'Application Consumer Key de votre API

Une fois tous les champs renseignés, cliquez sur "Créer" pour créer votre cert issuer.

Une nouvelle popin vous indique que votre émetteur de certificats est créé, et vous précisera le nom de votre cert issuer (à utiliser plus tard). La popin vous indique également un exemple d'ingress à créer qui utilise ce cert issuer, que nous allons détailler dans la prochaine section.

Étape 2 : Créer une ingress qui utilise le cert issuer

Maintenant que vous avez créé votre cert issuer, vous devez créer une ingress qui utilise ce cert issuer pour générer un certificat SSL pour votre application.

Comme évoquer dans la section précédente, la popin de confirmation de création de votre cert issuer vous donne un exemple d'ingress à créer. Voici comment adapter cet exemple à votre cas :

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-test
annotations:
cert-manager.io/cluster-issuer: ztg-cis-relaxed-betelgeuse # Remplacez par le nom de votre cert issuer
spec:
tls:
- hosts:
- "*.example.com" # Remplacez example.com par votre domaine personnalisé
secretName: a-certificate-tls-name # Un nom pour le secret TLS qui sera créé par cert-manager
rules:
- host: foo.example.com # Remplacez foo.example.com par le sous-domaine que vous souhaitez sécuriser
http:
paths:
- path: /path # Remplacez /path par le chemin d'accès à votre application, ou laissez / pour tout le trafic
pathType: Prefix
backend:
service:
name: foo # Remplacez foo par le nom de votre service qui porte votre application
port:
number: 80

Dans cet exemple, nous avons créé une ingress qui utilise le cert issuer que nous avons créé précédemment pour générer un certificat SSL pour le sous-domaine 'foo.example.com'. Le certificat sera stocké dans un secret TLS nommé 'a-certificate-tls-name'.

Une fois que vous avez créé cette ingress, cert-manager va automatiquement générer un certificat SSL pour le sous-domaine 'foo.example.com' en utilisant le cert issuer que vous avez créé. Vous pourrez ensuite accéder à votre application via 'https://foo.example.com' et les communications seront sécurisées avec le certificat SSL généré.

Vérification

Pour vérifier que votre certificat SSL a été correctement généré et que votre application est accessible via HTTPS, vous pouvez utiliser la commande suivante :

openssl s_client -connect foo.example.com:443 -servername foo.example.com </dev/null | openssl x509

Cette commande va tenter de se connecter à votre application via HTTPS et afficher les détails du certificat SSL utilisé. Si tout est correctement configuré, vous devriez voir les informations de votre certificat SSL, y compris le nom de domaine pour lequel il a été émis.

Le retour de la commande doit afficher les informations du certificat TLS généré, avec Let's Encrypt comme autorité de certification :

depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R13 # <- On retrouve bien Let's Encrypt ici
verify return:1
depth=0 CN = *.multikaas.com
verify return:1
DONE
-----BEGIN CERTIFICATE-----
MIIE+TCCA+GgAwIBAgISBYyaTCi2dB+/KdpauwPyuKnKMA0GCSqGSIb3DQEBCwUA
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
.
.
raCZ77h8+SObN0xIA/UNYZfuNP/GiKlYPuLr3XzBCh8Jp8Ft4F3gWgyeOJKLmkIU
0+PksN86paZf+grQU8dCFlwKy8MmYaA8WXj7dS8=
-----END CERTIFICATE-----