Available with limitations in: CSE Lite (1.73), CSE Pro (1.73)
Available without limitations in: EE
The module lifecycle stage: Experimental
The module has requirements for installation
Enabling NeuVector
To enable the module, use the web interface or the following command:
d8 platform module enable neuvectorAuthentication
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:
- Cluster groups configured in the
user-authnDexProviderare forwarded to NeuVector via the OIDCgroupsclaim. - Use
auth.allowedUserEmails/auth.allowedUserGroupsto gate who can complete Dex login. - Use
auth.defaultRoleandauth.groupRoleMappingto assign NeuVector roles to authenticated users.
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 toViolation,Threat,Incident), andAudit, 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.
Requirements
To the Deckhouse version: 1.74 and above.
Parameters
Schema version: 1
-
-
objectsettings.authOptions related to authentication or authorization in the application.
Default:
{}-
array of stringssettings.auth.allowedUserEmails
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.allowedEmailsfield of theDexClientresource. -
array of stringssettings.auth.allowedUserGroups
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.allowedGroupsfield of theDexClientresource.Caution! Note that you must add those groups to the appropriate field in the
DexProviderconfig. -
stringsettings.auth.defaultRole
NeuVector role assigned to OIDC-authenticated users when no
groupRoleMappingentry 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 aroleinitcfg.yamlConfigMap.Notes:
nonemeans no role is granted; unmapped users will not be able to log in.fedAdmin/fedReaderare only meaningful on a federation master cluster.ciopsis intended for CI/CD bots that push scan results, not for human admins.
Default:
adminExamples:
defaultRole: admindefaultRole: readerdefaultRole: ciopsdefaultRole: nonedefaultRole: fedAdmindefaultRole: fedReader -
array of objectssettings.auth.groupRoleMappingMaps IdP groups (taken from the OIDC
groupsclaim) to NeuVector roles. Order matters: the first matching entry wins (NeuVector semantics). Independent fromauth.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-
stringsettings.auth.groupRoleMapping.globalRole
Cluster-wide NeuVector role granted to members of the
group.Built-in roles:
admin,reader,ciops,none,fedAdmin,fedReader. Any custom role name defined viaroleinitcfg.yamlis also accepted.Leave empty (or set to
none) when only namespace-scoped roles are intended viaroleDomains.fedAdmin/fedReaderare valid only on a federation master cluster.Examples:
globalRole: adminglobalRole: readerglobalRole: ciopsglobalRole: noneglobalRole: fedAdminglobalRole: fedReader -
stringsettings.auth.groupRoleMapping.groupIdP group name to match against the
groupsclaim. -
objectsettings.auth.groupRoleMapping.roleDomainsNamespace-scoped role overrides as a map: NeuVector role name -> list of namespaces. Example:
{admin: [staging], reader: [prod, default]}.
-
-
-
objectsettings.controller
Configuration for the NeuVector controller component.
The controller manages policies, orchestrates enforcement, and provides the REST API.
-
objectsettings.controller.apiIngress
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:
{}-
booleansettings.controller.apiIngress.enableEnable the controller REST API Ingress.
Default:
false -
array of stringssettings.controller.apiIngress.whitelistSourceRangesAn array of CIDRs that are allowed to access the controller REST API.
Example:
whitelistSourceRanges: - 1.1.1.1/32
-
-
objectsettings.controller.nodeSelector
The same as in the pods’
spec.nodeSelectorparameter 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
storageClassparameter is only considered when the module is enabled. Changing the globalstorageClassparameter 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
falseis specified,emptyDirwill be forced to be used.Examples:
storageClass: falsestorageClass: nfs-storage-class -
array of objectssettings.controller.tolerations
The same as in the Pods’
spec.tolerationsparameter in Kubernetes.If the parameter is omitted or
false, it will be determined automatically.-
stringsettings.controller.tolerations.effect
-
stringsettings.controller.tolerations.key
-
stringsettings.controller.tolerations.operator
-
integersettings.controller.tolerations.tolerationSeconds
-
stringsettings.controller.tolerations.value
-
-
-