Skip to content

Local Ingress testing with port forwarding

Local Ingress testing with port forwarding allows developers to verify Ingress configurations and application connectivity on a local machine without requiring a cloud provider or an external LoadBalancer IP^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md].

Workflow

The testing process involves creating a deployment, exposing it via a service, defining an Ingress rule, and forwarding a local port to the Ingress Controller^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md].

First, a sample application deployment and service are created^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md].

[kubectl](<./kubectl.md>) create deployment demo --image=httpd --port=80
[kubectl](<./kubectl.md>) expose deployment demo

Next, an Ingress resource is created to map a specific hostname to the service^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md].

[kubectl](<./kubectl.md>) create [Ingress](<./ingress.md>) demo-localhost --class=nginx \
  --rule=demo.localdev.me/*=demo:80

Finally, kubectl port-forward is used to map a local port (e.g., 8080) to the Ingress Controller's service port (80)^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md].

[kubectl port-forward](<./kubectl-port-forward.md>) --namespace=ingress-nginx service/ingress-nginx-controller 8080:80

Accessing http://demo.localdev.me:8080/ in a browser or via curl should then return the application's response^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md].

Troubleshooting LoadBalancer limitations

In local development environments, the Ingress Controller service may show <pending> for the EXTERNAL-IP^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md]. This status indicates that the cluster cannot provision a real external load balancer, making port forwarding the primary method for immediate local testing^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md].

Sources

  • 400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md