This backend is experimental and still has many unresolved issues.
Features | Supported |
---|---|
Dump to ADC | ✅ |
Sync from ADC | ✅ |
Versions not listed below are untested.
Versions | Supported | Status |
---|---|---|
3.2.x | ✅ | Partial [1] |
3.3.x | ✅ | Partial [1] |
3.4.x | ✅ | Partial [1] |
3.5.x | ✅ | Partial [1] |
3.6.x | ✅ | Partial [1] |
3.7.x | ✅ | Partial [2] |
3.8.x | ✅ | Full |
3.9.x | ✅ | Full |
3.10.x | ✅ | Full |
3.11.x | ✅ | Full |
- The stream routes will be skipped during synchronization because they cannot be associated to the service on these versions.
- The
name
field is lost when the stream route is dumped and synchronized, because it is not defined in the APISIX schema.
You cannot reference an external upstream in Route/StreamRoute/Service using upstream_id
.
Basically ADC doesn't support this use case and you should use an upstream inline in the resource; you should use the YAML anchor syntax when you want to share the resource across multiple resources.
ADC does not support plugin templates, you should use a service to do this, the configuration on the service will be applied to all the routes it contains. If you wish to share the configuration across multiple services, you can use the YAML anchor syntax.
When you run diff and sync, you will find that some resources are always considered "changed", which is to be expected, although we don't expect it to happen.
The reason for this comes from the ultimate flexibility that Apache APISIX provides, such as the fact that you can configure the nodes
field in upstream in two different ways.
Under the hood, it uses a JSON Schema and some custom Lua logic to check your configuration, and in the process, some unprovided field values will be populated with default values. This actually changes the configurations stored in etcd, and when we read them again using the List API, they have been modified.
And some JSON Schema may also change when APISIX releases a new version.
Unless we have a built-in table of default values for core resources and plugins for each version, there's no easy way to avoid this problem.
However, we believe this issue can be resolved when APISIX use cases are more standardized.
This resource is not supported at this time, they will be excluded by the dump and sync processes. It may be provided when we do have a need for it.
ADC will do some normalization when exporting resources from APISIX, for example:
- Ensure that all referenced upstream is inlined into the resource that references it
- Ensure that the plugin config is inlined into the route that references it
- Ensure that routes and stream routes belong to a service
Aside from the formal changes, all of your configuration items will be retained as much as possible.
To be clear, guarantees of absolute consistency in the form of resources are not on our roadmap. ADC will convert your resources in its own way, using the fields documented in the ADC documentation that can be correctly mapped to resources in APISIX.