Dear APISIX community,

I would like to propose an improvement to enforce the behavior of the
data_plane role in decoupled deployments of Apache APISIX.


Background

In decoupled deployment mode, APISIX nodes are configured with specific roles:
control_plane: responsible for managing configurations and writing to etcd.
data_plane: responsible for handling traffic and reading configuration
from etcd only.

In this model, the Data Plane should never perform any writes to etcd.
However, the current implementation does not strictly enforce this
rule. As a result:

Plugins or custom logic running in the Data Plane can still invoke
core.etcd methods that perform write operations.

This breaks the intended separation of responsibilities between
Control Plane and Data Plane.
It introduces risks of accidental or unauthorized etcd writes from
Data Plane nodes.


Proposal

When APISIX is configured with deployment.role = data_plane, all calls
to etcd write-related functions in core.etcd should be strictly
forbidden.


Affected functions:

core.etcd.set
core.etcd.atomic_set
core.etcd.push
core.etcd.delete
core.etcd.rmdir


Expected behavior:

No additional configuration flag is needed.
When the role is data_plane, any invocation of the above methods:
Will be ignored, and return immediately (e.g., nil, "etcd write is
forbidden in data_plane").
Will emit a warning log, e.g.:
attempted etcd write via core.etcd.set is forbidden in data_plane mode


Breaking Change Notice

This change is a breaking behavioral change for users or plugins that
currently rely on etcd write operations from Data Plane nodes. After
this change:

Any such calls will no longer take effect.

Existing custom code (or community plugins) may break if they depend
on etcd write access in Data Plane mode.

This makes it essential to audit and update custom logic before
upgrading, especially in decoupled or multi-plane deployments.


Benefits

Enforces strict role-based access rules for etcd.
Prevents misbehavior in large-scale or security-sensitive deployments.
Reinforces separation of concerns between Control Plane and Data Plane.
Avoids side effects from plugin logic or custom scripts in the Data Plane.


Next Steps

If this direction makes sense, I’m happy to contribute an
implementation, with test coverage and documentation updates.


Looking forward to your feedback and suggestions.


Best regards,
Sun Yi
GitHub: https://github.com/LiteSun

Reply via email to