Available with limitations in CSE Lite (1.73), CSE Pro (1.73)

Available without limitations in:  EE

The module lifecycle stageExperimental
The module has requirements for installation

Enabling NeuVector

To enable the module, use the web interface or the following command:

d8 platform module enable neuvector

Authentication

NeuVector module is integrated with the Deckhouse Kubernetes Platform user-authn module via Dex. The user-authn module must be enabled — without it, the controller does not start.

The default built-in NeuVector admin user is disabled at the controller level (the controller is started with -no_def_admin), so the upstream-default admin/admin credentials cannot be used. All sign-in flows go through Dex:

If a local NeuVector user is needed for break-glass scenarios, create it through the NeuVector UI or REST API after the first OIDC sign-in.

Controller REST API access

To expose the NeuVector controller REST API on port 10443 outside the cluster, enable controller.apiIngress.enable. The Ingress is published on https://neuvector-api.<publicDomainTemplate>/ and proxies to the controller. Authentication is handled by NeuVector itself: obtain a token via POST /v1/auth and pass it as X-Auth-Token on subsequent requests. Optionally restrict access by client IP through controller.apiIngress.whitelistSourceRanges.

Forwarding Deckhouse security events

NeuVector can display platform security events — Falco detections, Dex login attempts, KubeVirt audit records, and containerd integrity failures — in its own UI next to enforcer events. Events flow through the standard NeuVector pipeline (UI, syslog, webhook).

A sidecar, se-bridge, always runs in each controller pod to accept events from LogShipper and write them to NeuVector’s internal KV store. Forwarding itself is controlled by the seBridgeEnabled setting in the loki module. While the setting is off, the sidecar idles and consumes no traffic.

Supported sources: falco, dex, virtualization-audit, containerd-integrity. Each lands in the semantically correct tab of NeuVector UI (Events / Security Events / Admission).

The integration is safe for response rules: a controller patch disables the Quarantine action for events with AgentID=se-bridge, so wildcard rules do not fire on external events.

Syslog and webhook forwarding

Events from se-bridge flow through NeuVector’s standard forwarders.

  • Syslog. The default configuration includes categories Event, Runtime (which expands to Violation, Threat, Incident), and Audit, so all three channels used by the bridge are forwarded out of the box. If categories have been trimmed manually in the NeuVector UI, make sure the ones carrying external events are still enabled.
  • Webhook. The default webhook category list is empty, so external events are not pushed to webhooks until categories are explicitly enabled in the NeuVector configuration (System Configuration → Webhooks). This is stock NeuVector behaviour, unrelated to the bridge.

Delivery reliability

Delivery to NeuVector does not carry a formal at-least-once guarantee. If the NeuVector controller or the se-bridge sidecar is unreachable, LogShipper holds unprocessed events in its per-node disk buffer. The default buffer is on the order of 256 MB; during a sustained hundreds-of-events-per-second stream a multi-tens-of-minutes controller outage can fill the buffer and some events may be lost for NeuVector.

Loki ingestion is not affected — each destination has its own independent buffer.

To reduce the risk of loss, watch the vector_buffer_byte_size metric from the log-shipper module and alert on sustained approach to the buffer limit. If you need to increase the buffer, configure the buffer field on the corresponding ClusterLogDestination — see the LogShipper documentation.

How to explicitly enable the module…

You may explicitly enable or disable the module in one of the following ways:

  • Via Deckhouse web UI. In the “System” → “System Management” → “Deckhouse” → “Modules” section, open the neuvector module and enable (or disable) the “Module enabled” toggle. Save changes.

    Example:

    Module enable/disable interface
  • Via Deckhouse CLI (d8).

    Use the d8 system module enable command for enabling, or d8 system module disable command for disabling the module (you need Deckhouse CLI (d8), configured to work with the cluster).

    Example of enabling the module:

    d8 system module enable neuvector
  • Using ModuleConfig neuvector.

    Set spec.enabled to true or false in ModuleConfig neuvector (create it if necessary);

    Example of a manifest to enable module neuvector:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: neuvector
    spec:
      enabled: true

How to configure the module…

You can configure the module in one of the following ways:

  • Via Deckhouse web UI.

    In the “System” → “System Management” → “Deckhouse” → “Modules” section, open the neuvector module and enable the “Advanced Settings” switch. Fill in the required fields in the “Configuration” tab or specify the module settings in YAML format on the “YAML” tab, excluding the settings section. Save the changes.

    Example:

    Module Setup Interface

    You can also edit the ModuleConfig object neuvector on the “YAML” tab in the module settings window (“System” → “System Management” → “Deckhouse” → “Modules”, open the module neuvector) by specifying the schema version in the spec.version parameter and the necessary module parameters in the spec.settings section.

  • Via Deckhouse CLI (d8) (requires Deckhouse CLI (d8) configured to work with the cluster).

    Edit the existing ModuleConfig neuvector (for more details on configuring Deckhouse, see the documentation) by executing the following command:

    d8 k edit mc neuvector

    Make the necessary changes in the spec.settings section. If necessary, specify the schema version in the spec.version parameter. Save the changes.

    You can also create a file with manifest for ModuleConfig neuvector using the example below. Fill in the spec.settings section with the required module parameters. If necessary, specify the schema version in the spec.version parameter.

    Apply the manifest using the following command (indicate the manifest file name):

    d8 k apply -f <FILENAME>

    Example of a manifest for ModuleConfig neuvector:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: neuvector
    spec:
      version: 1
      enabled: true
      settings: # Module parameters from the "Parameters" section below.

How to change the module release channel…

To change the module release channel, follow the instruction.

Requirements

To the Deckhouse version: 1.74 and above.

Parameters

Schema version: 1

  • settings
    object
    • settings.auth
      object
      Options related to authentication or authorization in the application.

      Default: {}

      • settings.auth.allowedUserEmails
        array of strings

        An array of emails of users that are allowed to authenticate via Dex.

        Used only if the user-authn module is enabled. Forwarded to the spec.allowedEmails field of the DexClient resource.

      • settings.auth.allowedUserGroups
        array of strings

        An array of user groups that are allowed to authenticate via Dex.

        Used only if the user-authn module is enabled. Forwarded to the spec.allowedGroups field of the DexClient resource.

        Caution! Note that you must add those groups to the appropriate field in the DexProvider config.

      • settings.auth.defaultRole
        string

        NeuVector role assigned to OIDC-authenticated users when no groupRoleMapping entry matches.

        Built-in roles: admin, reader, ciops, none, fedAdmin, fedReader. A custom role name is also accepted if the role is defined in NeuVector via a roleinitcfg.yaml ConfigMap.

        Notes:

        • none means no role is granted; unmapped users will not be able to log in.
        • fedAdmin / fedReader are only meaningful on a federation master cluster.
        • ciops is intended for CI/CD bots that push scan results, not for human admins.

        Default: admin

        Examples:

        defaultRole: admin
        
        defaultRole: reader
        
        defaultRole: ciops
        
        defaultRole: none
        
        defaultRole: fedAdmin
        
        defaultRole: fedReader
        
      • settings.auth.groupRoleMapping
        array of objects
        Maps IdP groups (taken from the OIDC groups claim) to NeuVector roles. Order matters: the first matching entry wins (NeuVector semantics). Independent from auth.allowedUserGroups — that one gates Dex login, this one assigns the in-product role afterwards.

        Default: []

        Example:

        groupRoleMapping:
        - globalRole: admin
          group: neuvector-admins
        - globalRole: none
          group: developers
          roleDomains:
            admin:
            - dev-team-a
            - dev-team-b
            reader:
            - staging
        
        • settings.auth.groupRoleMapping.globalRole
          string

          Cluster-wide NeuVector role granted to members of the group.

          Built-in roles: admin, reader, ciops, none, fedAdmin, fedReader. Any custom role name defined via roleinitcfg.yaml is also accepted.

          Leave empty (or set to none) when only namespace-scoped roles are intended via roleDomains. fedAdmin / fedReader are valid only on a federation master cluster.

          Examples:

          globalRole: admin
          
          globalRole: reader
          
          globalRole: ciops
          
          globalRole: none
          
          globalRole: fedAdmin
          
          globalRole: fedReader
          
        • settings.auth.groupRoleMapping.group
          string
          IdP group name to match against the groups claim.
        • settings.auth.groupRoleMapping.roleDomains
          object
          Namespace-scoped role overrides as a map: NeuVector role name -> list of namespaces. Example: {admin: [staging], reader: [prod, default]}.
    • settings.controller
      object

      Configuration for the NeuVector controller component.

      The controller manages policies, orchestrates enforcement, and provides the REST API.

      • settings.controller.apiIngress
        object

        Optional Ingress that exposes the NeuVector controller REST API (port 10443) outside the cluster.

        The Ingress is created on a separate hostname neuvector-api.<publicDomainTemplate> and forwards requests to the controller’s REST API. Authentication is handled by NeuVector itself (token via /v1/auth).

        Default: {}

        • settings.controller.apiIngress.enable
          boolean
          Enable the controller REST API Ingress.

          Default: false

        • settings.controller.apiIngress.whitelistSourceRanges
          array of strings
          An array of CIDRs that are allowed to access the controller REST API.

          Example:

          whitelistSourceRanges:
          - 1.1.1.1/32
          
      • settings.controller.nodeSelector
        object

        The same as in the pods’ spec.nodeSelector parameter in Kubernetes.

        If the parameter is omitted, it will be determined automatically.

        Example:

        disktype: ssd
        
      • settings.controller.storageClass

        The name of StorageClass that will be used to store the module’s data.

        If the value is not specified, the StorageClass will be used according to the global storageClass parameter setting.

        The global storageClass parameter is only considered when the module is enabled. Changing the global storageClass parameter while the module is enabled will not trigger disk re-provisioning.

        Warning. Specifying a value different from the one currently used (in the existing PVC) will result in disk re-provisioning and all data will be deleted.

        If false is specified, emptyDir will be forced to be used.

        Examples:

        storageClass: false
        
        storageClass: nfs-storage-class
        
      • settings.controller.tolerations
        array of objects

        The same as in the Pods’ spec.tolerations parameter in Kubernetes.

        If the parameter is omitted or false, it will be determined automatically.

        • settings.controller.tolerations.effect
          string
        • settings.controller.tolerations.key
          string
        • settings.controller.tolerations.operator
          string
        • settings.controller.tolerations.tolerationSeconds
          integer
        • settings.controller.tolerations.value
          string