Harvester – Ajoutez une chaîne de certificat personnalisée pour sécuriser le provisionnement des clusters Kubernetes via Rancher

Dans un environnement où Harvester et Rancher sont utilisés pour provisionner des clusters Kubernetes, il est souvent nécessaire d’utiliser une chaîne de certificats personnalisée pour sécuriser les communications entre les services. Cet article explique comment configurer Rancher et Harvester pour utiliser une chaîne de certificats TLS personnalisée, afin de garantir la sécurité lors du provisionnement des clusters Kubernetes.

Nous aborderons aussi l’activation des feature flags nécessaires dans Rancher.


1. Préparation de la chaîne de certificats

Pour configurer une chaîne de certificats personnalisée, vous aurez besoin des éléments suivants :

  • Certificat serveur (fullchain.crt), qui inclut le certificat serveur et les certificats intermédiaires.
  • Clé privée (privkey.key), associée au certificat serveur.
  • Certificat de l’autorité de certification (CA) (ca.crt), utilisé par Harvester et Rancher pour valider les communications TLS.

Assurez-vous d’obtenir ou de générer ces certificats en fonction de vos besoins de sécurité internes (CA privée ou autorité de certification publique).


2. Configurer Rancher avec la chaîne de certificats

a. Placer les certificats sur le serveur Rancher

Les certificats doivent être placés sur le serveur Rancher pour que celui-ci puisse les utiliser pour sécuriser les connexions TLS.

  • Copiez le certificat complet (fullchain.crt) et la clé privée (privkey.key) dans le répertoire suivant sur le serveur Rancher :
  /var/lib/rancher/k3s/server/tls/

b. Mettre à jour le certificat CA dans Rancher

Si vous utilisez une autorité de certification privée ou non reconnue par Rancher, vous devez mettre à jour Rancher pour qu’il fasse confiance à cette CA.

  • Ajoutez le certificat CA dans Rancher avec la commande suivante :
  helm upgrade rancher rancher-stable/rancher \
    --namespace cattle-system \
    --set privateCA=true \
    --set-file cacerts=/path/to/fullchain.crt
  • Remplacez /path/to/fullchain.crt par le chemin vers votre fichier de certificat CA.

c. Activer les Feature Flags dans Rancher

Pour ajouter Harvester comme fournisseur de clusters, il est nécessaire d’activer certains feature flags dans Rancher :

  • Connectez-vous à l’interface GUI de Rancher.
  • Accédez à Global Settings puis à Feature Flags.
  • Activez les feature flags suivants :
  • harvester : Permet l’intégration de Harvester.
  • multi-cluster-management

3. Configurer Harvester avec la chaîne de certificats via l’interface GUI

a. Ajouter le certificat CA dans Harvester via l’interface GUI

Plutôt que de passer par la ligne de commande, vous pouvez ajouter le certificat CA dans Harvester via l’interface graphique. Voici les étapes à suivre :

  1. Connectez-vous à l’interface utilisateur de Harvester.
  2. Allez dans Settings depuis le menu principal.
  3. Dans la zone additional-ca, ajoutez votre certificat CA :
  • Collez le contenu de votre certificat CA (fichier .crt) dans le champ Additional CA.

Cliquez sur Save pour appliquer la configuration.

    Cela permet à Harvester de faire confiance aux certificats émis par cette CA pour les connexions sécurisées avec Rancher.


    4. Vérifications et redémarrage des services

    Après avoir configuré les certificats, il est important de tester et de vérifier les connexions sécurisées entre Rancher et Harvester.

    a. Tester la connexion TLS entre Harvester et Rancher

    • Depuis Harvester, vous pouvez tester la connexion TLS à Rancher pour vérifier si les certificats sont acceptés :
     kubectl exec -it <harvester-pod> -- curl -v https://rancher.test.fr

    b. Vérifier les logs

    • Examinez les logs des pods dans Rancher et Harvester pour identifier toute erreur potentielle liée aux certificats :
      kubectl logs -f pod/cattle-cluster-agent-<ID> -n cattle-system

    c. Redémarrer les services si nécessaire

    • Redémarrez Rancher pour qu’il prenne en compte les certificats mis à jour :
      systemctl restart rancher
    • Redémarrez les pods Harvester :
      kubectl rollout restart deployment -n cattle-system

    5. Provisionner des clusters Kubernetes sécurisés via Rancher

    Une fois que les certificats sont configurés et que Harvester et Rancher peuvent communiquer en toute sécurité, vous pouvez provisionner des clusters Kubernetes via Rancher en suivant ces étapes :

    1. Accéder à Rancher et sélectionner Cluster Management.
    2. Ajouter un cluster Harvester en choisissant « Harvester Cluster » comme type de cluster.
    3. Suivez les étapes pour configurer le cluster et valider que la communication entre Rancher et Harvester est sécurisée grâce à la chaîne de certificats.

    Schéma de flux (en ASCII)

    Voici un schéma simplifié du processus de communication sécurisé entre Rancher et Harvester lors du provisionnement des clusters Kubernetes :

    +----------------------+                            +----------------------+
    |       Rancher        |                            |      Harvester       |
    |----------------------|                            |----------------------|
    |                      |                            |                      |
    | 1. Certificat TLS     | <---- HTTPS (TLS) ---->    | 2. Certificat TLS    |
    |    (fullchain.crt)    |                            |   (Certificat CA)    |
    |                      |                            |                      |
    +----------------------+                            +----------------------+
            ^                                                   ^
            |                                                   |
            v                                                   v
    +----------------------+                            +----------------------+
    |  CA Root Certificate  |                            |  CA Root Certificate  |
    |     (ca.crt)          |                            |     (ca.crt)          |
    +----------------------+                            +----------------------+
    
             |                                                   |
             v                                                   v
    
    +--------------------------------------------------------------------------+
    |                           Kubernetes Cluster                             |
    +--------------------------------------------------------------------------+

    Ce schéma montre que les certificats TLS et les CA sont utilisés pour établir des connexions sécurisées entre Rancher et Harvester, permettant ainsi le provisionnement sécurisé de clusters Kubernetes.

    (optionnel) Configuration ACL pour sécuriser les connexions sortantes des nœuds Harvester vers Rancher

    Voici un exemple d’ACL étendue nommée ACL_HARVESTER_OUT, à appliquer en sortie sur l’interface du VLAN où se trouvent les nœuds Harvester. Cette configuration permet aux nœuds Harvester (192.168.1.2 et 192.168.1.3) d’initier des connexions HTTPS (port 443) vers Rancher (192.168.2.2), tout en autorisant uniquement les réponses aux connexions établies dans le sens inverse.

    ip access-list extended ACL_HARVESTER_OUT
     10 permit tcp host 192.168.1.2 host 192.168.2.2 eq 443
     20 permit tcp host 192.168.1.3 host 192.168.2.2 eq 443
     30 permit tcp host 192.168.2.2 host 192.168.1.2 gt 1023 established
     40 permit tcp host 192.168.2.2 host 192.168.1.3 gt 1023 established
     50 deny ip any any

    Cette ACL doit ensuite être appliquée en sortie sur l’interface du VLAN où se trouvent les nœuds Harvester, par exemple sur l’interface VLAN 10 :

    interface Vlan10
     ip access-group ACL_HARVESTER_OUT out

    Cela garantit que seuls les nœuds Harvester peuvent initier des connexions vers Rancher, tandis que les réponses de Rancher sont autorisées uniquement pour les connexions établies.


    Conclusion

    Configurer une chaîne de certificats personnalisée dans Rancher et Harvester est essentiel pour garantir des communications sécurisées lors du provisionnement de clusters Kubernetes. En suivant ces étapes, vous pouvez sécuriser les échanges TLS entre ces deux plateformes et vous assurer que les clusters Kubernetes sont provisionnés en toute sécurité.