Despliegue de un nodo satélite Cyberwatch en un clúster Kubernetes existente

Esta página describe los pasos a seguir para desplegar un nodo satélite Cyberwatch en un clúster Kubernetes existente. Este procedimiento supone que el usuario dispone de conocimientos básicos del orquestador Kubernetes y de Helm.

Procedimiento de despliegue

  1. Disponer de un nodo maestro Cyberwatch configurado para permitir la conexión de un nodo satélite y tener acceso SSH a dicho nodo maestro

    En el caso de que el nodo maestro utilice bases de datos externas, estas bases de datos deben ser accesibles desde el clúster Kubernetes.

  2. Disponer de un clúster que cumpla con los requisitos técnicos del software.

  3. Conectarse al repositorio Helm:

    helm registry login harbor.cyberwatch.fr
    

    Completar el nombre de usuario anteponiendo cbw$, y luego proporcionar la contraseña.

  4. Crear y editar el archivo de configuración values.yml

    Es necesario conservar el archivo values.yml de forma segura. El archivo es requerido para la actualización de las imágenes Docker o para actualizar el chart Helm.

    Los pasos presentados a continuación tienen como objetivo crear un archivo de configuración mínimo que permita el despliegue del satélite Cyberwatch.

    A continuación, un ejemplo de archivo values.yml en su configuración mínima:

    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. Configurar el acceso al registro de contenedores. El par usuario/contraseña es similar al utilizado para conectarse al repositorio Helm

    global:
      image:
        registryCredentials:
          - name: cyberwatch-credentials
            registry: harbor.cyberwatch.fr/cbw-on-premise
            username: "changeme"
            password: "changeme"
    
  6. Configurar el nombre que tendrá el nodo satélite Cyberwatch en la aplicación mediante el parámetro node.name:

    node:
      name: cyberwatch-node-name
      type: satellite
    
  7. Configurar el campo nginx.resolver

    1. Obtener la IP del DNS resolver kube-dns:

      kubectl -n kube-system get svc kube-dns
      
    2. Asignar la dirección IP del resolvedor DNS del clúster Kubernetes al campo nginx.resolver

      Ejemplo:

      nginx:
        resolver: 10.3.0.10
      
  8. Configurar el ingress

    1. Uno o varios ingress pueden configurarse en el campo ingress.hosts. Cada ingress debe tener un hostname único y un ingressClassName. Las IngressClass disponibles en el clúster pueden listarse con el siguiente comando:

      kubectl get ingressclasses
      
    2. Asignar el valor seleccionado al campo ingressClassName y el nombre de dominio que aceptará las solicitudes al campo hostname.

      Ejemplo:

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

      La dirección IP que corresponde al nombre de dominio debe ser la del balanceador de carga del clúster.

    Si es necesario, hay más información disponible en los comentarios del archivo de configuración por defecto del chart Helm.

  9. Configurar los accesos a las bases de datos y a la aplicación Cyberwatch

    1. Indicar las direcciones IP de conexión a las bases de datos en los campos database.host y redis.host:

      database:
        external: true
        host: "changeme"
      
      redis:
        external: true
        host: "changeme"
      
    2. Conectarse por SSH al nodo maestro y mostrar las contraseñas:

      sudo cyberwatch show-secrets
      
      MYSQL_ROOT_PASSWORD=...
      MYSQL_PASSWORD=...
      REDIS_PASSWORD=...
      SECRET_KEY_BASE=...
      SECRET_KEY_CREDENTIAL=...
      
    3. Indicar las contraseñas de las bases de datos obtenidas en los campos correspondientes:

      database:
        external: true
        host: "changeme"
        password: "MYSQL_PASSWORD"
        root_password: "MYSQL_ROOT_PASSWORD"
      
      redis:
        external: true
        host: "changeme"
        password: "REDIS_PASSWORD"
      
    4. Indicar las credenciales de conexión a la aplicación Cyberwatch:

      key:
        base: "SECRET_KEY_BASE"
        credential: "SECRET_KEY_CREDENTIAL"
      
  10. Desactivar el uso del contenedor thirdParties definiendo los siguientes parámetros:

    thirdParties:
      enabled: false
    
  11. Generar credenciales para los pods container-scanner y web-scanner:

    cat <<-EOF
    containerScanner:
      container_scanner_api_key: "$(openssl rand -hex 16):$(openssl rand -hex 16)"
    
    webScanner:
      web_scanner_api_key: "$(openssl rand -hex 16):$(openssl rand -hex 16)"
    EOF
    
  12. Crear el namespace cyberwatch en el clúster:

    kubectl create namespace cyberwatch
    
  13. Configurar el certificado raíz que permite conectarse a la aplicación Cyberwatch

    1. Conectarse por SSH al nodo maestro y mostrar el certificado raíz:

      sudo cyberwatch show-root-cert
      
    2. Guardar el certificado raíz en un archivo llamado ./cbw-root-ca-cert.pem:

      cat <<EOF > ./cbw-root-ca-cert.pem
      -----BEGIN CERTIFICATE-----
      ...
      -----END CERTIFICATE-----
      EOF
      
    3. Importar el certificado como un secreto en el clúster Kubernetes:

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

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

    El despliegue del chart Helm tendrá en cuenta las configuraciones del archivo values.yml para configurar la aplicación.

  15. Verificar el estado de los pods:

    kubectl -n cyberwatch get pods
    
  16. Cuando todos los pods estén en ejecución, conectarse a la interfaz web del nodo maestro para comprobar el enlace con el nodo satélite. También es posible verificar que sidekiq se comunica correctamente con el nodo maestro:

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

(Opcional) Recuperar el archivo de configuración por defecto del chart Helm

La documentación anterior indica los pasos a seguir para establecer una configuración mínima de Cyberwatch.

Es posible recuperar el archivo de configuración por defecto del chart Helm de Cyberwatch, para disponer de un archivo completo que indique qué valores por defecto son modificables.

El uso de este archivo es recomendable si desea desviarse de la configuración mínima propuesta en esta documentación, especialmente para la configuración de un certificado TLS, por ejemplo.

Para recuperar el archivo de configuración por defecto del chart Helm:

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

Este archivo puede ser modificado según sus necesidades, y el chart Helm puede ser redeplegado a partir de esta nueva configuración.


Volver arriba

English Français Español