Skip to content

request help: Dashboard plugin configuration is lost after CRD-based ApisixRoute updates — need best practice for sync and separation of responsibilities #2408

@10bingo

Description

@10bingo

Issue description

Hi APISIX team,

We’re using a production deployment setup based on apisix-ingress-controller, Apache APISIX, and APISIX Dashboard.
In this setup, our DevOps team manages ApisixRoute CRD resources, while the development team is responsible for configuring route-level plugins (e.g., plugins configured via Dashboard or Admin API).

However, we’re encountering a serious usability issue:

❗ Problem
When the DevOps team updates an ApisixRoute resource (e.g., via kubectl apply or GitOps pipeline), any plugin configurations that were previously applied by the development team via Dashboard are overwritten/lost.

This creates a broken workflow:

Developers configure plugins via Dashboard (which calls the Admin API).

Later, when CRDs are updated (e.g., route path or upstream), the plugins configured via Admin API are replaced by what's defined in the CRD (which may not contain plugin section).

The plugin configuration is not preserved, even if it was working fine before.

🤝 Expected Collaboration Model
We want to decouple responsibilities like this:

DevOps manages routing and upstreams via ApisixRoute.

Developers manage plugin configuration via Dashboard (Admin API).

But currently there is no official way to synchronize or preserve Admin API-based plugin changes when CRD-based route updates happen.

✅ What we’re asking for
We’d like to know:

Is there an official best practice for separating CRD-based routing and Admin API-based plugin configuration?

Could APISIX Ingress Controller preserve Admin API plugin config (or at least detect drift)?

Could a hybrid model be supported where plugins configured by developers via Admin API are merged or patched during CRD sync?

If not yet supported, would the team accept a proposal to add a "plugin preservation" or "plugin layering" mechanism?

📌 Temporary Workaround Considered
We’re currently considering writing a custom sync controller that:

Watches for ApisixRoute changes in the cluster

Detects whether a route has been updated

Then calls Admin API to reapply or merge the expected plugin configuration

But this feels error-prone and redundant if it could be supported by the APISIX Ingress Controller natively.

Environment

we use lastest apisix-ingress-controller and apisix 3.12

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions