Skip to main content
Version: Next

Get APISIX and APISIX Ingress Controller

APISIX Ingress Controller is a Kubernetes ingress controller using Apache APISIX as the high performance reverse proxy.

APISIX Ingress Controller can be configured using the native Kubernetes Ingress or Gateway API, as well as with APISIX’s own declarative and easy-to-use custom resources. The controller translates these resources into APISIX configuration.

This tutorial series walks you through how to quickly get started with APISIX on a kind Kubernetes cluster and use the APISIX Ingress Controller to manage resources.

Prerequisites#

  • Install Docker as a dependency of kind.
  • Install kind to start a local Kubernetes cluster, or use any existing Kubernetes cluster (version 1.26+).
  • Install Helm (version 3.8+).
  • Install kubectl to run commands against Kubernetes clusters.

Create a Cluster and Configure Namespace#

In this section, you will be creating a kind cluster and configuring the namespace. Skip to the next section if you already have an existing cluster and a corresponding namspace.

Ensure you have Docker running and start a kind cluster:

kind create cluster

Create a new namespace ingress-apisix:

kubectl create namespace ingress-apisix

Set the namespace to ingress-apisix to avoid specifying it explicitly in each subsequent command:

kubectl config set-context --current --namespace=ingress-apisix

Install APISIX and APISIX Ingress Controller (Standalone API-driven mode)#

Install the Gateway API CRDs, APISIX Standalone API-driven mode, and APISIX Ingress Controller:

helm repo add apisix https://charts.apiseven.com
helm repo update

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

More details on the installation can be found in the Installation Guide.

Verify Installation#

Check the statuses of resources in the current namespace:

kubectl get all

You should wait for all pods to be running before proceeding:

NAME                                             READY   STATUS    RESTARTS   AGE
pod/apisix-7c5fb8d546-gtfqn 1/1 Running 0 113s
pod/apisix-ingress-controller-56c46fd54f-f8fxt 1/1 Running 0 113s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/apisix-admin ClusterIP 10.96.174.119 <none> 9180/TCP 113s
service/apisix-gateway NodePort 10.96.231.33 <none> 80:31321/TCP 113s
service/apisix-metrics-service ClusterIP 10.96.77.248 <none> 8443/TCP 113s

NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/apisix 1/1 1 1 113s
deployment.apps/apisix-ingress-controller 1/1 1 1 113s

NAME DESIRED CURRENT READY AGE
replicaset.apps/apisix-7c5fb8d546 1 1 1 113s
replicaset.apps/apisix-ingress-controller-56c46fd54f 1 1 1 113s

To verify the installed APISIX version, map port 80 of the apisix-gateway service to port 8080 on the local machine:

kubectl port-forward svc/apisix-gateway 9080:80 &

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/x.x.x