Composite Architecture
note
This feature is experimental
#
BackgroundThe new architecture has the following features:
- Reduce maintenance costs without the need for additional maintenance of a complete APISIX cluster and (etcd cluster).
- Deployment is simpler and easier to use
#
DesignIn the new architecture, the control-plane will simulate the ETCD configuration center to publish data. The data-plane APISIX will subscribe to data from the control-plane.
#
Cache (etcd-server-mock)Since apisix strongly relies on the etcd API, the control-plane will simulate the etcd service publishing data to APISIX.
#
Architecture#
Timing diagram#
InstallationSave the APISIX Ingress version to an environment variable to be used next:
APISIX_INGRESS_VERSION="1.7.0"
Clone the APISIX Ingress source code of this version into a new directory apisix-APISIX_VERSION:
git clone --depth 1 --branch ${APISIX_INGRESS_VERSION} https://github.com/apache/apisix-ingress-controller.git ingress-apisix-${APISIX_INGRESS_VERSION}
Install the CRDs and ingress-apisix:
cd ingress-apisix-${APISIX_INGRESS_VERSION}
# install CRDs
kubectl apply -k samples/deploy/crd/v1
# install ingress-apisix
kubectl apply -f samples/deploy/composite.yaml
# install ingress-apisix output
namespace/ingress-apisix created
clusterrole.rbac.authorization.k8s.io/apisix-view-clusterrole created
serviceaccount/apisix-view-serviceaccount created
clusterrolebinding.rbac.authorization.k8s.io/apisix-view-clusterrolebinding created
configmap/apisix-gw-config.yaml created
deployment.apps/ingress-apisix-composite-deployment created
service/ingress-apisix-gateway created
Check the pod status to confirm successful installation:
kubectl get service -n ingress-apisix # check service
kubectl get pods -n ingress-apisix # check pod
# service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-apisix-gateway NodePort 10.99.236.58 <none> 80:31143/TCP,443:30166/TCP 90s
# pod
NAME READY STATUS RESTARTS AGE
ingress-apisix-composite-deployment-5df9bc99c7-xxpvq 2/2 Running 0 100s
#
exampleInstall the ApisixRoute and httpbin app:
kubectl apply -f samples/httpbin/httpbin-route.yaml
After forwarding the local port 9080 to the ingress-apisix-gateway
service port 80, send a request:
# forward local port 9080 to ingress-apisix-gateway service port 80
kubectl port-forward service/ingress-apisix-gateway 9080:80 -n ingress-apisix &
# send a request
curl http://127.0.0.1:9080/headers -H 'Host: httpbin.org'
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.74.0",
"X-Forwarded-Host": "httpbin.org"
}
}