Déploiement d’un nœud satellite Cyberwatch sur un cluster Kubernetes existant

Cette page décrit les étapes à suivre pour déployer un nœud satellite Cyberwatch sur un cluster Kubernetes existant. Cette procédure suppose que l’utilisateur dispose d’une connaissance basique de l’orchestrateur Kubernetes et de Helm.

Procédure de déploiement

  1. Disposer d’un nœud maitre Cyberwatch configuré pour permettre la connexion d’un nœud satellite et avoir un accès SSH à ce nœud maitre

    Dans le cas où le nœud maitre utilise des bases de données externes. Ces bases de données doivent être accessibles au cluster Kubernetes.

  2. Posséder un cluster respectant les prérequis techniques du logiciel.

  3. Se connecter au dépôt Helm :

    helm registry login harbor.cyberwatch.fr
    

    Compléter le nom de l’utilisateur en le préfixant par cbw$, puis fournir le mot de passe.

  4. Créer puis éditer le fichier de configuration values.yml

    Il est nécessaire de conserver le fichier values.yml de manière sécurisée. Le fichier est requis pour la mise à jour des images Docker ou encore pour mettre à jour le chart Helm.

    Les étapes présentées ci-dessous visent à mettre en place un fichier de configuration minimal permettant le déploiement du satellite Cyberwatch.

    Voici un exemple de fichier values.yml dans sa configuration minimale :

    global:
      pki:
        root_ca: cbw-root-ca-cert
      image:
        registryCredentials:
          - name: cyberwatch-credentials
            registry: harbor.cyberwatch.fr/cbw-on-premise
            username: "changeme"
            password: "changeme"
    
    node:
      name: cyberwatch-node-name
      type: satellite
    
    nginx:
      resolver: "changeme"
    
    ingress:
      enabled: true
      hosts:
        - hostname: cyberwatch.example.com
          ingressClassName: nginx
          tls:
            enabled: true
    
    thirdParties:
      enabled: false
    
    database:
      external: true
      host: "changeme"
      password: "changeme"
      root_password: "changeme"
    
    redis:
      external: true
      host: "changeme"
      password: "changeme"
    
    key:
      base: "changeme"
      credential: "changeme"
    
  5. Configurer l’accès au registre des conteneurs. Le couple identifiant/mot de passe est similaire à celui utilisé pour se connecter au dépôt Helm

    global:
      image:
        registryCredentials:
          - name: cyberwatch-credentials
            registry: harbor.cyberwatch.fr/cbw-on-premise
            username: "changeme"
            password: "changeme"
    
  6. Configurer le nom que prendra le nœud satellite Cyberwatch dans l’application à l’aide du paramètre node.name :

    node:
      name: cyberwatch-node-name
      type: satellite
    
  7. Configurer le champ nginx.resolver

    1. Récupérer l’IP du DNS resolver kube-dns :

      kubectl -n kube-system get svc kube-dns
      
    2. Assigner l’adresse IP du résolveur DNS du cluster Kubernetes au champ nginx.resolver

      Exemple :

      nginx:
        resolver: 10.3.0.10
      
  8. Configurer l’ingress

    1. Un ou plusieurs ingress peuvent être configuré dans le champs ingress.hosts. Chaque ingress doit posséder un hostname unique et un ingressClassName. Les IngressClass disponibles sur le cluster peuvent être listées à l’aide de la commande ci-dessous :

      kubectl get ingressclasses
      
    2. Assigner la valeur sélectionnée au champ ingressClassName et le nom de domaine qui acceptera les requêtes au champ hostname.

      Exemple :

      ingress:
        enabled: true
        hosts:
          - hostname: cyberwatch.example.com
            ingressClassName: nginx
            tls:
            enabled: true
      

      L’adresse IP qui correspond au nom de domaine doit être celle du répartiteur de charge du cluster.

    Si nécessaire, plus d’informations sont disponibles en commentaires du fichier de configuration par défaut du chart Helm.

  9. Configurer les accès aux bases de données et à l’application cyberwatch

    1. Renseigner les adresses IP de connections aux bases de données dans les champs database.host et redis.host :

      database:
        external: true
        host: "changeme"
      
      redis:
        external: true
        host: "changeme"
      
    2. Se connecter en SSH au nœud maitre et afficher les mots de passes :

      sudo cyberwatch show-secrets
      
      MYSQL_ROOT_PASSWORD=...
      MYSQL_PASSWORD=...
      REDIS_PASSWORD=...
      SECRET_KEY_BASE=...
      SECRET_KEY_CREDENTIAL=...
      
    3. Renseigner les mots de passes de bases de données obtenues dans les champs correspondant :

      database:
        external: true
        host: "changeme"
        password: "MYSQL_PASSWORD"
        root_password: "MYSQL_ROOT_PASSWORD"
      
      redis:
        external: true
        host: "changeme"
        password: "REDIS_PASSWORD"
      
    4. Renseigner les identifiants de connexions à l’application cyberwatch :

      key:
        base: "SECRET_KEY_BASE"
        credential: "SECRET_KEY_CREDENTIAL"
      
  10. Désactiver l’utilisation du conteneur thirdParties en définissant les paramètres suivants :

    thirdParties:
      enabled: false
    
  11. Créer le namespace cyberwatch sur le cluster :

    kubectl create namespace cyberwatch
    
  12. Configurer le certificat racine permettant de se connecter à l’application cyberwatch

    1. Se connecter en SSH sur le nœud maitre et afficher le certificat racine :

      sudo cyberwatch show-root-cert
      
    2. Stocker le certificat racine dans un fichier nommé ./cbw-root-ca-cert.pem :

      cat <<EOF > ./cbw-root-ca-cert.pem
      -----BEGIN CERTIFICATE-----
      ...
      -----END CERTIFICATE-----
      EOF
      
    3. Importer le certificat en tant que secret sur le cluster Kubernetes :

      kubectl -n cyberwatch create secret generic cbw-root-ca-cert --from-file=./cbw-root-ca-cert.pem
      
  13. Générer un couple de clef SSH et l’enregistrer en tant que secret :

    ssh-keygen -q -N '' -f ./id_ed25519 -t ed25519
    kubectl -n cyberwatch create secret generic web-scanner-ssh-authorized-keys --from-file=authorized_keys="./id_ed25519.pub"
    kubectl -n cyberwatch create secret generic ssh-private-key --from-file="./id_ed25519"
    
  14. Déployer le chart Helm :

    helm -n cyberwatch install cyberwatch oci://harbor.cyberwatch.fr/cbw-on-premise/cyberwatch-chart -f values.yml
    

    Le déploiement du chart Helm va prendre en compte les configurations du fichier values.yml afin de configurer l’application.

  15. Vérifier l’état des pods :

    kubectl -n cyberwatch get pods
    
  16. Quand tous les pods sont en cours d’exécution, se connecter à l’interface web du nœud maitre afin de constater le lien avec le nœud satellite. Il est possible également de vérifier que sidekiq communique bien avec le nœud maitre :

    kubectl -n cyberwatch logs $(kubectl -n cyberwatch get pods -l app=sidekiq  -o jsonpath='{.items[*].metadata.name}')
    

(Optionnel) Récupérer le fichier de configuration par défaut du chart Helm

La documentation ci-dessus indique les étapes à suivre afin de mettre en place une configuration minimale de Cyberwatch.

Il est possible de récupérer le fichier de configuration par défaut du chart Helm de Cyberwatch, afin de disposer d’un fichier complet indiquant quelles valeurs par défaut sont modifiables.

L’utilisation de ce fichier est recommandée si vous souhaitez dévier de la configuration minimale proposée dans cette documentation, notamment pour la mise en place d’un certificat TLS par exemple.

Pour récupérer le fichier de configuration par défaut du chart Helm :

helm show values oci://harbor.cyberwatch.fr/cbw-on-premise/cyberwatch-chart > values.yml

Ce fichier peut ensuite être modifié selon vos besoins, et le chart Helm redéployé à partir de cette nouvelle configuration.


Retour en haut