feat: add support for integrate with DP service discovery (#1465)

The APISIX data plane has provided the ability to integrate with service discovery components.

There are two ways to integrate APISIX Ingress with service discovery components:

* Data plane implementation:

  * Configure service discovery and other related components on the APISIX data plane.
  * APISIX Ingress only considers some configurations from service discovery components when processing some configurations/translations for compatibility.

* Control plane implementation:

  * Connect the service discovery component through the APISIX Ingress controller, and push the upstream data obtained from the service discovery component together with other configuration items to the data plane for configuration.
  * NOTE: This method is similar to apisix-seed project.
  * This mode is relatively simple and unified, and the required functions can be realized without data plane-aware service discovery components.

The solution we are going to implement this time is the first one, which is implemented on the data plane.
16 files changed
tree: 0ab7dcd7ca37dcee8ef6d910334a8524c9b495b8
  1. .github/
  2. cmd/
  3. conf/
  4. docs/
  5. pkg/
  6. policy/
  7. releases/
  8. samples/
  9. test/
  10. utils/
  11. .asf.yaml
  12. .dockerignore
  13. .gitattributes
  14. .gitignore
  15. .gitmodules
  16. .golangci.yml
  17. .licenserc.yaml
  18. .markdownlint.yml
  19. CHANGELOG.md
  20. Dockerfile
  21. go.mod
  22. go.sum
  23. install.md
  24. LICENSE
  25. link-check-config.json
  26. main.go
  27. Makefile
  28. NOTICE
  29. powered-by.md
  30. README.md
  31. tools.go
README.md

Apache APISIX for Kubernetes

Go Report Card Slack

Use Apache APISIX for Kubernetes Ingress.

All configurations in apisix-ingress-controller are defined with Kubernetes CRDs (Custom Resource Definitions). Support configuring plugins, service registration discovery mechanism for upstreams, load balancing and more in Apache APISIX.

apisix-ingress-controller is an Apache APISIX control plane component. Currently it serves for Kubernetes clusters. In the future, we plan to separate the submodule to adapt to more deployment modes, such as virtual machine clusters.

The technical architecture of apisix-ingress-controller:

Status

This project is currently general availability.

Features

  • Declarative configuration for Apache APISIX with Custom Resource Definitions(CRDs), using k8s yaml struct with minimum learning curve.
  • Hot-reload during yaml apply.
  • Native Kubernetes Ingress (both v1 and v1beta1) support.
  • Auto register k8s endpoint to upstream (Apache APISIX) node.
  • Support load balancing based on pod (upstream nodes).
  • Out of box support for node health check.
  • Plug-in extension supports hot configuration and immediate effect.
  • Support SSL and mTLS for routes.
  • Support traffic split and canary deployments.
  • Support TCP 4 layer proxy.
  • Ingress controller itself as a pluggable hot-reload component.
  • Multi-cluster configuration distribution.

More about comparison among multiple Ingress Controllers.

Get started

Prerequisites

Apisix ingress controller requires Kubernetes version 1.16+. Because we used CustomResourceDefinition v1 stable API. From the version 1.0.0, APISIX-ingress-controller need to work with Apache APISIX version 2.7+.

Works with APISIX Dashboard

Currently, APISIX Ingress Controller automatically manipulates some APISIX resources, which is not very compatible with APISIX Dashboard. In addition, users should not modify resources labeled managed-by: apisix-ingress-controllers via APISIX Dashboard.

Internal Architecture

Apache APISIX Ingress vs. Kubernetes Ingress Nginx

  • The control plane and data plane are separated, which can improve security and deployment flexibility.
  • Hot-reload during yaml apply.
  • More convenient canary deployment.
  • Verify the correctness of the configuration, safe and reliable.
  • Rich plugins and ecology.
  • Supports APISIX custom resources and Kubernetes native Ingress resources.

Contributing

We welcome all kinds of contributions from the open-source community, individuals and partners.

How to contribute

Most of the contributions that we receive are code contributions, but you can also contribute to the documentation or simply report solid bugs for us to fix.

For new contributors, please take a look at issues with a tag called Good first issue or Help wanted.

How to report a bug

  • Ensure the bug was not already reported by searching on GitHub under Issues.

  • If you're unable to find an open issue addressing the problem, open a new one. Be sure to include a title and clear description, as much relevant information as possible, and a code sample or an executable test case demonstrating the expected behavior that is not occurring.

Contributor over time

Contributor over time

Community

Todos

  • More todos will display in issues

User stories

If you are willing to share with us some scenarios and use cases when you use APISIX Ingress, please reply to the issue, or submit PR to update Powered-BY file

Milestone

Terminology

  • Ingress APISIX: the whole service that contains the proxy (Apache APISIX) and ingress controller (apisix ingress controller).
  • apisix-ingress-controller: the ingress controller component.