ApisixRoute
is a CRD resource which focus on how to route traffic to expected backend, it exposes many features supported by Apache APISIX. Compared to Ingress, functions are implemented in a more native way, with stronger semantics.
URI path are always used to split traffic, for instance, requests with host foo.com
and /foo
prefix should be routed to service foo
while requests which path is /bar
should be routed to service bar
, in the manner of ApisixRoute
, the configuration should be:
apiVersion: apisix.apache.org/v2alpha1 kind: ApisixRoute metadata: name: foor-bar-route spec: http: - name: foo match: hosts: - foo.com paths: - "/foo*" backend: serviceName: foo servicePort: 80 - name: bar match: paths: - "/bar" backend: serviceName: bar servicePort: 80
There are two path types can be used, prefix
and exact
, default is exact
, while if prefix
is desired, just append a *
, for instance, /id/*
matches all paths with the prefix of /id/
.
Path based route are most common, but if it's not enough, try other route features in ApisixRoute
such as methods
, nginxVars
.
The methods
splits traffic according to the HTTP method, the following configurations routes requests with GET
method to foo
service (a Kubernetes Service).
apiVersion: apisix.apache.org/v2alpha1 kind: ApisixRoute metadata: name: method-route spec: http: - name: method match: paths: - / methods: - GET backend: serviceName: foo servicePort: 80
By default a referenced Service will be watched, so it‘s newest endpoints list can be updated to Apache APISIX. apisix-ingress-controller provides another mechanism that just use the ClusterIP
of this service, if that’s what you want, just set the resolveGranularity
to service
(default is endpoint
).
apiVersion: apisix.apache.org/v2alpha1 kind: ApisixRoute metadata: name: method-route spec: http: - name: method match: paths: - /* methods: - GET backend: serviceName: foo servicePort: 80 resolveGranularity: service
Apache APISIX provides more than 40 plugins, which can be used in ApisixRoute
. All configuration items are named same to the one in APISIX.
apiVersion: apisix.apache.org/v2alpha1 kind: ApisixRoute metadata: name: httpbin-route spec: http: - name: httpbin match: hosts: - local.httpbin.org paths: - /* backend: serviceName: foo servicePort: 80 plugins: - name: cors enable: true
The above configuration enables Cors plugin for requests which host is local.httpbin.org
.