Thanks for the question. This restriction is based on a core architectural principle of Apache APISIX’s decoupled deployment model: *Data Plane nodes must not write to etcd.*
For reference, this principle is reflected in the official architecture diagram: https://github.com/apache/apisix/blob/master/docs/assets/images/apisix.png This ensures a clear separation of responsibilities and avoids potential consistency or security issues. There is no compatible or recommended workaround for writing to etcd from the Data Plane. Zhiyuan Ju <juzhiy...@apache.org> 于2025年5月22日周四 14:54写道: > Hi, > > Can you guide us on how to migrate the existing implementations to align > with the new proposal? We can stop using those functions to write to ETCD, > but how can we change the implementations to make it work again? > > On Thu, May 22, 2025 at 10:24 AM Yi Sun <su...@apache.org> wrote: > > > 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 > > >