Get APISIX
Apache APISIX is a dynamic, real-time, and high-performance API Gateway. It is a top-level project of the Apache Software Foundation.
You can use APISIX API Gateway as a traffic entrance to process all business data. It offers features including dynamic routing, dynamic upstream, dynamic certificates, A/B testing, canary release, blue-green deployment, limit rate, defense against malicious attacks, metrics, monitoring alarms, service observability, service governance, and more.
In addition, the project also offers APISIX Ingress Controller, an open-source ingress controller that allows you to manage external client traffic to services running in a Kubernetes cluster. The APISIX Ingress Controller routes incoming traffic to specific services based on the requested URL path or hostname.
This tutorial covers two installation methods for you to quickly get started with APISIX:
- Start APISIX in Docker with a quickstart script.
- Start APISIX on a kind Kubernetes cluster and use APISIX Ingress Controller to manage resources.
Prerequisite(s)â
- Docker
- Kubernetes
Get APISIXâ
- Docker
- Kubernetes
To provide a better experience in this tutorial, the requirement of Admin API key is switched off by default. Please turn on the API key requirement of Admin API in the production environment.
Start APISIX in Docker with the quickstart script:
curl -sL "https://run.api7.ai/apisix/quickstart" | sh
The script starts two Docker containers, apisix-quickstart
and etcd-quickstart
in the apisix-quickstart-net
Docker network, where etcd is used to store APISIX configurations.
You should see the following message once APISIX is ready:
â APISIX is ready!
In this section, you will be creating a kind cluster and starting APISIX Ingress Controller on the cluster.
Start a Kind Cluster
Ensure you have Docker running and start a kind cluster:
kind create cluster
You should see the following response:
Creating cluster "kind" ...
â Ensuring node image (kindest/node:v1.30.0) đŧ
â Preparing nodes đĻ
â Writing configuration đ
â Starting control-plane đšī¸
â Installing CNI đ
â Installing StorageClass đž
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Create Namespace
Create a new namespace ingress-apisix
:
kubectl create namespace ingress-apisix
You should see a response:
namespace/ingress-apisix created
Set Preferred Namespace
Set the namespace to ingress-apisix
so that subsequent commands do not need to explicitly specify the namespace every time:
kubectl config set-context --current --namespace=ingress-apisix
To verify if the default namespace is modified:
kubectl config view --minify | grep namespace:
You should see the namespace has been set:
namespace: ingress-apisix
Install APISIX and APISIX Ingress Controller
Add the APISIX chart repository and update:
helm repo add apisix https://charts.apiseven.com \
&& helm repo update
Install APISIX (in standalone API-driven mode) and APISIX Ingress controller:
helm install apisix \
--namespace ingress-apisix \
--create-namespace \
--set apisix.deployment.role=traditional \
--set apisix.deployment.role_traditional.config_provider=yaml \
--set etcd.enabled=false \
--set ingress-controller.enabled=true \
--set ingress-controller.config.provider.type=apisix-standalone \
--set ingress-controller.apisix.adminService.namespace=ingress-apisix \
--set ingress-controller.gatewayProxy.createDefault=true \
apisix/apisix
You should see a response showing APISIX Ingress Controller is deployed:
NAME: apisix
LAST DEPLOYED: Fri Jul 11 16:34:49 2025
NAMESPACE: ingress-apisix
STATUS: deployed
REVISION: 1
TEST SUITE: None
Verify Installationâ
- Docker
- Kubernetes
Send a request to see if APISIX is running:
curl -sI "http://127.0.0.1:9080" | grep Server
If everything is ok, you should see the APISIX version:
Server: APISIX/3.13.0
APISIX is now installed and running.
Check Pod Statuses
To verify that APISIX Ingress Controller is installed and running, check the status of the pods:
kubectl get pods
If everything is ok, you should see that all pods in the Running
status:
NAME READY STATUS RESTARTS AGE
apisix-7c5fb8d546-245mj 1/1 Running 0 2m15s
apisix-ingress-controller-56c46fd54f-c4p8b 1/1 Running 0 2m15s
Check Service Statuses
You can also check the status of the services:
kubectl get services
If everything is ok, you should see a response similar to the following:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
apisix-admin ClusterIP 10.96.246.222 <none> 9180/TCP 3m50s
apisix-gateway NodePort 10.96.178.252 <none> 80:31523/TCP 3m50s
apisix-metrics-service ClusterIP 10.96.26.210 <none> 8443/TCP 3m50s
Verify Installed APISIX Version
To verify the installed APISIX version, first map port 80
of the apisix-gateway
service to port 8080
on the local machine:
kubectl port-forward svc/apisix-gateway 9080:80 &
Then send a request to the gateway:
curl -sI "http://127.0.0.1:9080" | grep Server
If everything is ok, you should see the APISIX version:
Server: APISIX/3.13.0
If you would like to use a load balancer to expose the service on the kind cluster as an alternative to port forwarding, see load balancer kind documentation.
APISIX Ingress Controller is now installed and running.
Next Stepsâ
Follow the rest of the getting started tutorials to learn and compare different ways of configuring APISIX, including using:
- Admin API
- Kubernetes Manifest Files
- API Declarative CLI (ADC)
- APISIX Model Context Protocol (APISIX-MCP)
If you would like to declaratively configure APISIX with ADC, or use natural language through LLM models to configure APISIX with APISIX-MCP, please visit their docs for installation and setups before visiting the other tutorials.
Note that the APISIX instance started with the quickstart script and the APISIX Ingress Controller instance started with kind are not optimized for production. For production installation, please see the production installation options for more information.