Deploy NGINX Gateway Fabric on a kind Cluster
Overview
Learn how to run NGINX Gateway Fabric on a kind (Kubernetes in Docker) cluster.
Before you begin
To complete the steps in this guide, you first need to install the following tools for Kubernetes management and development:
- kubectl: A command-line interface for Kubernetes that allows you to manage and inspect cluster resources, and control containerized applications.
- kind: Short for Kubernetes in Docker, this tool lets you run Kubernetes clusters locally using Docker containers, ideal for testing and development purposes.
Create a kind Cluster
To create a kind cluster, choose from the following options:
-
Option 1: Use the
kind
tool. For detailed instructions, refer to the kind quick start guide Creating a Cluster. -
Option 2: Run the following
make
command in the root of your repository:make create-kind-cluster
This command creates a kind cluster using the settings from your Makefile.
Deploy NGINX Gateway Fabric
Now that you’ve created a kind cluster, the next step is to install NGINX Gateway Fabric.
To install NGINX Gateway Fabric, choose the appropriate installation guide that suits your setup:
Set up a NodePort
When using kind clusters, be aware that NodePort services require additional setup.
For example, the following will automatically set up port forwarding into a local cluster (intended for development):
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 31437
hostPort: 8080
protocol: TCP
- containerPort: 31438
hostPort: 8443
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: nginx-gateway
namespace: nginx-gateway # must be same namespace as your gateway
labels:
app.kubernetes.io/name: nginx-gateway
app.kubernetes.io/instance: nginx-gateway
app.kubernetes.io/version: "edge"
spec:
type: NodePort
selector:
app.kubernetes.io/name: nginx-gateway
app.kubernetes.io/instance: nginx-gateway
ports: # Update the following ports to match your Gateway Listener ports
- name: http
port: 80
protocol: TCP
targetPort: 80
nodePort: 31437 # See https://kind.sigs.k8s.io/docs/user/configuration/#nodeport-with-port-mappings
- name: https
port: 443
protocol: TCP
targetPort: 443
nodePort: 31438
Note:
For LoadBalancer services, you’ll need a third-party controller like MetalLB to assign external IPs. The default Helm chart creates a LoadBalancer service; however, you can disable this by adding--set service.create=false
to your Helm command. Afterward, you can configure port forwarding as described below to access the examples.
Configure Port Forwarding
Once NGINX Gateway Fabric has been installed, if you don’t have port forwarding set with both the NodePort
and extraPortMappings
, you need to configure port forwarding from local ports 8080 and 8443 to ports 80 and 443 on the nginx-gateway Pod.
To configure port forwarding, run the following command:
kubectl -n nginx-gateway port-forward <pod-name> 8080:80 8443:443
Note:
NGINX will only start listening on these ports after you set up a Gateway resource with a valid listener.
Get Started with NGINX Gateway Fabric
Learn how to use NGINX Gateway Fabric by exploring the tutorials in the examples directory. The guides provide practical instructions and scenarios to help you use NGINX Gateway Fabric effectively.