Skip to content

port-forwarding ingress-nginx controller locally

Port-forwarding the ingress-nginx controller locally is a method used to access Ingress resources on a local machine without requiring an external LoadBalancer IP or modifying DNS records^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md].

Context

In Kubernetes, an Ingress Controller manages external access to services, typically via HTTP^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md]. While production environments often use a LoadBalancer service type to expose the controller, local development environments (such as Minikube or bare-metal clusters) often leave the EXTERNAL-IP in a <pending> state^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md]. Port-forwarding allows you to bypass this requirement by tunneling traffic from your local workstation directly to the controller pod^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md].

Prerequisites

Before forwarding traffic, ensure the following resources are configured:

  1. Ingress Controller: Deployed in the ingress-nginx namespace^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md].
  2. Deployment & Service: A running deployment (e.g., a web server) and a corresponding Service exposing it^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md].
  3. Ingress Resource: An Ingress rule that maps a specific host (e.g., demo.localdev.me) to the backend service^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md].

Implementation

To establish the connection, use the kubectl port-forward command targeting the ingress-nginx-controller service^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md].

The standard syntax maps a local port (e.g., 8080) to the controller's HTTP 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

Once the tunnel is active, you can access the backend service via the local port using the hostname defined in the Ingress resource^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md]. For example, navigating to http://demo.localdev.me:8080/ in a browser or using curl will route the traffic through the local tunnel to the cluster^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md].

Sources

^[400-devops__06-Kubernetes__k8s-learning__06.ingress__README.md]