Skip to content

Kind Cluster Setup Guide

This guide walks through setting up a local Kind cluster with the essential prerequisites for MCP Gateway: Gateway API CRDs and Istio as the Gateway API provider.

Prerequisites

Note: On Linux hosts the broker uses fsnotify, which consumes inotify instances. Kind defaults to fs.inotify.max_user_instances=128, and Kubernetes system components consume most of those slots, which can cause the broker pod to exit on startup with EMFILE ("too many open files"). After creating the cluster, raise the limit on the Kind node:

<container-runtime> exec <kind-node-name> sysctl fs.inotify.max_user_instances=1024

See Troubleshooting: Broker Crashes on Startup for details.

Step 1: Create Kind Cluster

# Create a Kind cluster with port mappings for Gateway API
cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:

- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  extraPortMappings:
  - containerPort: 80
    hostPort: 8080
    protocol: TCP
  - containerPort: 443
    hostPort: 8443
    protocol: TCP
EOF

Why these port mappings: Allows access to the Istio gateway from your local machine on ports 8080 (HTTP) and 8443 (HTTPS).

Step 2: Install Gateway API CRDs

# Install Gateway API standard CRDs
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.1/standard-install.yaml

# Verify installation
kubectl get crd gateways.gateway.networking.k8s.io

Step 3: Install Istio as Gateway API Provider

# Add Istio Helm repository
helm repo add istio https://istio-release.storage.googleapis.com/charts
helm repo update

# Install Istio base components
helm install istio-base istio/base -n istio-system --create-namespace --wait

# Install Istio control plane
helm install istiod istio/istiod -n istio-system --wait

# Verify Istio installation
kubectl get pods -n istio-system

Step 4: Verify Cluster Readiness

# Check that all components are ready
kubectl get pods -n istio-system
kubectl get crd | grep gateway

# Verify Kind cluster is accessible
kubectl cluster-info --context kind-kind

Your Kind cluster is now ready with Gateway API and Istio installed!

Next Steps

Now that you have a cluster with the prerequisites, choose your installation method:

After installation, continue with configuration:

Cleanup

When you're done testing:

# Delete the Kind cluster (uses default name "kind")
kind delete cluster