K3S is a certified Kubernetes distribution built for IoT and Edge computing, whilst Apache APISIX is also good at IoT (See MQTT plugin) and runs well on ARM architecture. It's a good choice to use Ingress APISIX as the north-south API gateway in K3S.
As the data plane of apisix-ingress-controller, Apache APISIX can be deployed at the same time using Helm chart.
helm repo add apisix https://charts.apiseven.com
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
kubectl create ns ingress-apisix
helm install apisix apisix/apisix \
--set gateway.type=NodePort \
--set ingress-controller.enabled=true \
--namespace ingress-apisix \
--set ingress-controller.config.apisix.serviceNamespace=ingress-apisix \
kubectl get service --namespace ingress-apisix
If you are using K3S, the default kubeconfig file is in /etc/rancher/k3s and root permission may required.
Five Service resources were created.
apisix-gateway, which processes the real traffic;
apisix-admin, which acts as the control plane to process all the configuration changes.
apisix-ingress-controller, which exposes apisix-ingress-controller's metrics.
apisix-etcd-headlessfor etcd service and internal communication.
The gateway service type is set to
NodePort, so that clients can access Apache APISIX through the Node IPs and the assigned port.
If you are using K3S and you want to expose a
LoadBalancer service, try to use Klipper.