ApisixRoute
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.
Path based route rules#
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/.
Advanced route features#
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
Service Resolution Granularity#
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
Plugins#
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.