title: Get APISIX and APISIX Ingress Controller keywords:

  • APISIX ingress
  • Apache APISIX
  • Kubernetes ingress description: Learn how to quickly install and set up Apache APISIX Ingres Controller.

import Tabs from ‘@theme/Tabs’; import TabItem from ‘@theme/TabItem’;

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