Distribuzione di un nodo satellite Cyberwatch su un cluster Kubernetes esistente

Questa pagina descrive i passaggi da seguire per distribuire un nodo satellite Cyberwatch su un cluster Kubernetes esistente. Questa procedura presuppone che l’utente disponga di una conoscenza di base dell’orchestratore Kubernetes e di Helm.

Procedura di distribuzione

  1. Disporre di un nodo master Cyberwatch configurato per consentire la connessione di un nodo satellite e avere un accesso SSH a tale nodo master

    Nel caso in cui il nodo master utilizzi database esterni, questi database devono essere accessibili dal cluster Kubernetes.

  2. Disporre di un cluster che rispetti i prerequisiti tecnici del software.

  3. Connettersi al repository Helm:

    helm registry login harbor.cyberwatch.fr
    

    Inserire il nome utente anteponendo il prefisso cbw$, quindi fornire la password.

  4. Creare e poi modificare il file di configurazione values.yml

    È necessario conservare il file values.yml in modo sicuro. Il file è richiesto per l’aggiornamento delle immagini Docker o per aggiornare il chart Helm.

    I passaggi illustrati di seguito hanno lo scopo di predisporre un file di configurazione minimo che consenta la distribuzione del satellite Cyberwatch.

    Ecco un esempio di file values.yml nella sua configurazione minima:

    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"
    
    containerScanner:
      container_scanner_api_key: "changeme:changeme"
    
    key:
      base: "changeme"
      credential: "changeme"
    
  5. Configurare l’accesso al registry dei container. La coppia nome utente/password è analoga a quella utilizzata per connettersi al repository Helm

    global:
      image:
        registryCredentials:
          - name: cyberwatch-credentials
            registry: harbor.cyberwatch.fr/cbw-on-premise
            username: "changeme"
            password: "changeme"
    
  6. Configurare il nome che il nodo satellite Cyberwatch assumerà nell’applicazione tramite il parametro node.name:

    node:
      name: cyberwatch-node-name
      type: satellite
    
  7. Configurare il campo nginx.resolver

    1. Recuperare l’IP del DNS resolver kube-dns:

      kubectl -n kube-system get svc kube-dns
      
    2. Assegnare l’indirizzo IP del resolver DNS del cluster Kubernetes al campo nginx.resolver

      Esempio:

      nginx:
        resolver: 10.3.0.10
      
  8. Configurare l’ingress

    1. È possibile configurare uno o più ingress nel campo ingress.hosts. Ogni ingress deve avere un hostname univoco e un ingressClassName. Le IngressClass disponibili sul cluster possono essere elencate tramite il comando seguente:

      kubectl get ingressclasses
      
    2. Assegnare il valore selezionato al campo ingressClassName e il nome di dominio che accetterà le richieste al campo hostname.

      Esempio:

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

      L’indirizzo IP corrispondente al nome di dominio deve essere quello del load balancer del cluster.

    Se necessario, ulteriori informazioni sono disponibili nei commenti del file di configurazione predefinito del chart Helm.

  9. Configurare gli accessi ai database e all’applicazione Cyberwatch

    1. Inserire gli indirizzi IP di connessione ai database nei campi database.host e redis.host:

      database:
        external: true
        host: "changeme"
      
      redis:
        external: true
        host: "changeme"
      
    2. Connettersi in SSH al nodo master e visualizzare le password:

      sudo cyberwatch show-secrets
      
      MYSQL_ROOT_PASSWORD=...
      MYSQL_PASSWORD=...
      REDIS_PASSWORD=...
      SECRET_KEY_BASE=...
      SECRET_KEY_CREDENTIAL=...
      
    3. Inserire le password dei database ottenute nei campi corrispondenti:

      database:
        external: true
        host: "changeme"
        password: "MYSQL_PASSWORD"
        root_password: "MYSQL_ROOT_PASSWORD"
      
      redis:
        external: true
        host: "changeme"
        password: "REDIS_PASSWORD"
      
    4. Inserire le credenziali di connessione all’applicazione Cyberwatch:

      key:
        base: "SECRET_KEY_BASE"
        credential: "SECRET_KEY_CREDENTIAL"
      
  10. Disattivare l’utilizzo del container thirdParties definendo i parametri seguenti:

    thirdParties:
      enabled: false
    
  11. Generare le credenziali per il pod container-scanner:

    cat <<-EOF
    containerScanner:
      container_scanner_api_key: "$(openssl rand -hex 16):$(openssl rand -hex 16)"
    EOF
    
  12. Creare il namespace cyberwatch sul cluster:

    kubectl create namespace cyberwatch
    
  13. Configurare il certificato root che consente di connettersi all’applicazione Cyberwatch

    1. Connettersi in SSH al nodo master e visualizzare il certificato root:

      sudo cyberwatch show-root-cert
      
    2. Salvare il certificato root in un file denominato ./cbw-root-ca-cert.pem:

      cat <<EOF > ./cbw-root-ca-cert.pem
      -----BEGIN CERTIFICATE-----
      ...
      -----END CERTIFICATE-----
      EOF
      
    3. Importare il certificato come secret sul cluster Kubernetes:

      kubectl -n cyberwatch create secret generic cbw-root-ca-cert --from-file=./cbw-root-ca-cert.pem
      
  14. Distribuire il chart Helm:

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

    La distribuzione del chart Helm terrà conto delle configurazioni del file values.yml per configurare l’applicazione.

  15. Verificare lo stato dei pod:

    kubectl -n cyberwatch get pods
    
  16. Quando tutti i pod sono in esecuzione, accedere all’interfaccia web del nodo master per verificare il collegamento con il nodo satellite. È inoltre possibile verificare che sidekiq comunichi correttamente con il nodo master:

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

(Facoltativo) Recuperare il file di configurazione predefinito del chart Helm

La documentazione precedente indica i passaggi da seguire per predisporre una configurazione minima di Cyberwatch.

È possibile recuperare il file di configurazione predefinito del chart Helm di Cyberwatch, per disporre di un file completo che indica quali valori predefiniti sono modificabili.

Si consiglia di utilizzare questo file se si desidera discostarsi dalla configurazione minima proposta in questa documentazione, ad esempio per la configurazione di un certificato TLS.

Per recuperare il file di configurazione predefinito del chart Helm:

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

Questo file può quindi essere modificato in base alle esigenze e il chart Helm ridistribuito a partire da questa nuova configurazione.