Skip to content

Latest commit

 

History

History
72 lines (45 loc) · 3.59 KB

README.md

File metadata and controls

72 lines (45 loc) · 3.59 KB

Apache APISIX Backend for ADC

This backend is experimental and still has many unresolved issues.

Supported Features

Features Supported
Dump to ADC
Sync from ADC

Supported Versions

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
  1. The stream routes will be skipped during synchronization because they cannot be associated to the service on these versions.
  2. The name field is lost when the stream route is dumped and synchronized, because it is not defined in the APISIX schema.

Known Issues/Limitations

ID-based upstream references are not supported

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.

Plugin templates (plugin_configs) are not supported

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.

Some resources will always be considered "changed"

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.

Consumer Group not supported yet

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.

The output of dump is not same which Apache APISIX

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.