Teams often treat plugin custom entities as an exception and manage them outside the main configuration path. That creates split ownership, extra manual steps, and more room for drift between Kubernetes resources and gateway state. The cleaner pattern is to model those entities as Kubernetes custom resources so they move with the rest of the deployment configuration.
Why database-only handling breaks plugin custom entity governance
Plugin-specific custom entities are not just rows in a database, they are part of the live deployment contract between configuration, runtime behavior, and the gateway or control plane that enforces it. When teams manage them only through a database-backed workflow, they often create a parallel process that the platform does not understand, which weakens auditability and makes the entity state harder to reason about during change.
The main failure is that the database becomes the source of truth for one team, while Kubernetes and the gateway remain the source of truth for everyone else. That split turns a simple configuration decision into a coordination problem, and coordination problems are where drift, missed updates, and inconsistent rollout behavior usually start.
Teams also underestimate how often plugin custom entities need to move with the rest of the deployment. If the entity definition is not expressed in the same configuration model as the workload that consumes it, the entity can exist in one environment, be partially updated in another, or be forgotten during promotion, rollback, or disaster recovery.
What drift looks like in practice
Drift usually shows up as a mismatch between what the database says should exist and what the platform actually serves. A gateway may still route traffic based on an older entity definition, a Kubernetes rollout may complete without the corresponding entity change, or a rollback may restore application pods without restoring the data-side state that the plugin expects.
That mismatch is especially painful for teams that rely on plugin behavior to enforce policy, transformation, routing, or enrichment. The application can appear healthy while the plugin behaves differently, because the state it needs is hidden in a separate workflow and is not versioned, reviewed, or promoted together with the deployment artifact.
Once drift exists, troubleshooting becomes slower because operators must inspect two different planes of control and reconcile them manually. The more environments, tenants, or plugin instances you have, the more likely it becomes that a local fix in the database will silently diverge from the cluster state.
Why Kubernetes custom resources are the cleaner model
Modeling plugin-specific entities as Kubernetes custom resources keeps the entity definition inside the same declarative system that already manages the workload. That gives teams one versioned configuration path, one promotion flow, and one reconciliation loop, which reduces split ownership and makes changes observable through the same tooling used for the rest of the stack.
It also improves operational discipline because the entity lifecycle becomes part of the cluster lifecycle. Review, approval, rollout, rollback, and environment promotion can all follow the same path as the application, instead of depending on a separate database update that may be missed, delayed, or applied out of order.
For teams that need a reference point for declarative workload state and identity-bound access patterns, the broader model is consistent with SPIFFE workload identity specification, CIS Controls v8, and the control themes in NIST SP 800-53 Rev 5 Security and Privacy Controls.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
CIS Controls v8 and NIST SP 800-53 Rev 5 set the technical controls, while ISO/IEC 27001:2022 defines the regulatory obligations.
| Framework | Control / Reference | Relevance |
|---|---|---|
| CIS Controls v8 | CIS-4 — Secure Configuration of Enterprise Assets and Software | Declarative entity state reduces configuration drift across deployments. |
| Recommendation — Manage plugin entities as versioned configuration to reduce drift and manual state divergence. | ||
| NIST SP 800-53 Rev 5 | CM-2 — Baseline Configuration | Custom resources create a baseline that can be controlled and reconciled. |
| CM-6 — Configuration Settings | The workflow is about keeping runtime settings aligned with intended state. | |
| Recommendation — Define plugin entities in a controlled configuration baseline and reconcile deviations. Apply approved configuration settings through the same deployment path as the workload. | ||
| ISO/IEC 27001:2022 | A.8.9 — Configuration management | The question is fundamentally about avoiding unmanaged configuration paths and drift. |
| Recommendation — Keep plugin-specific entities under formal configuration management and change control. | ||
Practitioner Guidance
What to verify: Confirm that the plugin entity definition can be recreated entirely from declarative cluster state, including promotion and rollback, before retiring any database-only path. If the answer depends on a manual database edit to become consistent again, the workflow is still split.
Decision rule: If the entity affects runtime behavior, routing, or enforcement, treat it as configuration that belongs in the same managed deployment path as the workload. Keep a database-backed workflow only when the data is truly transactional business state and not a deployment control.
Common mistake: Teams often leave the database workflow in place because it feels simpler for a single plugin, then discover that every new environment, replica set, or gateway change creates another reconciliation point. Simplicity at creation time becomes operational debt at scale.
Practitioner takeaway: The test is whether the entity can change safely with the rest of the system; if it cannot, it will drift, and drift is the real defect, not the storage layer.
Related resources from NHI Mgmt Group
- What do security teams get wrong when they manage detections only through a proprietary SIEM portal?
- What do security teams get wrong when they try to manage major vulnerabilities only through emergency response?
- What do teams get wrong when they publish database and cache ports through Kubernetes ingress?
- What do teams get wrong when they manage open banking APIs manually instead of through automation?