How to Setup Ingress Controller

How to Setup Ingress Controller: A Comprehensive Tutorial Introduction In modern containerized environments, managing external access to services running inside a Kubernetes cluster is crucial. An Ingress Controller plays a pivotal role by routing external HTTP and HTTPS traffic to the appropriate services based on defined rules. Setting up an Ingress Controller correctly ensures scalable, secure,

Nov 17, 2025 - 11:03
Nov 17, 2025 - 11:03
 3

How to Setup Ingress Controller: A Comprehensive Tutorial

Introduction

In modern containerized environments, managing external access to services running inside a Kubernetes cluster is crucial. An Ingress Controller plays a pivotal role by routing external HTTP and HTTPS traffic to the appropriate services based on defined rules. Setting up an Ingress Controller correctly ensures scalable, secure, and efficient traffic management, making it an essential component for production-grade Kubernetes deployments.

This tutorial provides a detailed, step-by-step guide on how to set up an Ingress Controller, explores best practices, introduces useful tools and resources, demonstrates real-world examples, and answers frequently asked questions. Whether you are a beginner or an experienced Kubernetes user, this guide will help you master Ingress Controller setup and management.

Step-by-Step Guide

1. Understanding Ingress and Ingress Controller

An Ingress in Kubernetes is an API object that manages external access to services within a cluster, typically HTTP/S traffic. It defines rules for routing traffic based on hostnames or paths.

An Ingress Controller is a specialized load balancer that implements those Ingress rules. It listens to the Kubernetes API for updates and configures itself accordingly to route traffic.

2. Prerequisites

  • A running Kubernetes cluster (version 1.14+ recommended)
  • kubectl configured with access to the cluster
  • Basic knowledge of Kubernetes objects like Pods, Services, and Deployments

3. Choose an Ingress Controller

There are several popular Ingress Controllers to choose from, including:

  • Nginx Ingress Controller: Widely used, stable, and feature-rich.
  • Traefik: Dynamic configuration, easy to use.
  • HAProxy Ingress: High performance and advanced routing capabilities.
  • Istio Gateway: For service mesh-based ingress.

This tutorial focuses on setting up the Nginx Ingress Controller due to its popularity and broad community support.

4. Deploying Nginx Ingress Controller

The simplest way to deploy the Nginx Ingress Controller is by applying the official YAML manifests maintained by the Kubernetes community.

Step 1: Create the Namespace

Create a dedicated namespace to isolate the Ingress Controller components.

kubectl create namespace ingress-nginx

Step 2: Deploy the Controller

Apply the official manifest to deploy the Nginx Ingress Controller in your cluster.

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.0/deploy/static/provider/cloud/deploy.yaml

This manifest deploys all necessary components including the controller pod, service, and role-based access control (RBAC) permissions.

Step 3: Verify Deployment

Check the status of the pods in the ingress-nginx namespace.

kubectl get pods -n ingress-nginx

You should see a running pod named similar to ingress-nginx-controller-xxxxx.

5. Expose the Ingress Controller

The Ingress Controller service type determines how it is exposed externally.

  • Cloud environments: Typically use LoadBalancer service type for automatic external IP assignment.
  • On-premises or minikube: Use NodePort or configure MetalLB for load balancing.

To check the service type and external IP:

kubectl get svc -n ingress-nginx

6. Create a Sample Application

Before configuring Ingress, create a simple application and service to route traffic to.

Step 1: Deploy an Example App

kubectl create deployment webapp --image=nginxdemos/hello

Step 2: Expose the Deployment

kubectl expose deployment webapp --port=80 --target-port=80 --type=ClusterIP

7. Define Ingress Resource

Create an Ingress resource to route HTTP traffic from the Ingress Controller to the webapp service.

Step 1: Create ingress.yaml

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

name: webapp-ingress

namespace: default

annotations:

nginx.ingress.kubernetes.io/rewrite-target: /

spec:

ingressClassName: nginx

rules:

- host: example.local

http:

paths:

- path: /

pathType: Prefix

backend:

service:

name: webapp

port:

number: 80

Step 2: Apply the Ingress

kubectl apply -f ingress.yaml

8. Update DNS or Hosts File

To access the application via the hostname example.local, update your local machines /etc/hosts file with the external IP of the Ingress Controller service.

EXTERNAL_IP example.local

9. Test Access

Open a browser and navigate to http://example.local. You should see the welcome page from the Nginx demo application.

Best Practices

1. Use TLS for Secure Communication

Always configure TLS to encrypt traffic between clients and your cluster. Use Kubernetes secrets to manage TLS certificates and reference them in your Ingress resource.

2. Use Ingress Annotations Wisely

Annotations enable advanced features like rate limiting, authentication, and custom error pages. Refer to your Ingress Controller documentation to leverage these options effectively.

3. Monitor and Log Ingress Traffic

Set up monitoring and logging for your Ingress Controller to identify performance bottlenecks and security issues. Tools like Prometheus and Grafana integrate well for observability.

4. Limit Access Using Whitelisting

Use IP whitelisting annotations or Network Policies to restrict external access and reduce attack surfaces.

5. Keep Ingress Controller Updated

Regularly update your Ingress Controller to benefit from security patches, bug fixes, and new features.

6. Use IngressClass for Multiple Controllers

If running multiple Ingress Controllers in a cluster, use IngressClass to specify which controller manages which Ingress resources.

Tools and Resources

1. Official Documentation

2. CLI Tools

  • kubectl: Main CLI tool for managing Kubernetes resources.
  • k9s: Terminal UI to interact with Kubernetes clusters.

3. Monitoring and Logging

  • Prometheus: Metrics collection and alerting.
  • Grafana: Visualization dashboards.
  • ELK Stack (Elasticsearch, Logstash, Kibana): Centralized logging.

4. Certificate Management

  • cert-manager: Automates TLS certificate management inside Kubernetes.

Real Examples

Example 1: Basic HTTP Ingress

This example routes HTTP traffic to two different services based on the URL path.

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

name: multi-service-ingress

annotations:

nginx.ingress.kubernetes.io/rewrite-target: /

spec:

ingressClassName: nginx

rules:

- host: app.example.com

http:

paths:

- path: /service1

pathType: Prefix

backend:

service:

name: service1

port:

number: 80

- path: /service2

pathType: Prefix

backend:

service:

name: service2

port:

number: 80

Example 2: TLS-Enabled Ingress

This example shows how to configure TLS termination using a Kubernetes secret.

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

name: tls-ingress

spec:

ingressClassName: nginx

tls:

- hosts:

- secure.example.com

secretName: tls-secret

rules:

- host: secure.example.com

http:

paths:

- path: /

pathType: Prefix

backend:

service:

name: secure-service

port:

number: 443

FAQs

What is the difference between Ingress and Ingress Controller?

An Ingress is a Kubernetes resource that defines rules for routing external traffic to internal services. The Ingress Controller is the actual implementation that reads Ingress resources and manages the routing of traffic accordingly.

Can I run multiple Ingress Controllers in one cluster?

Yes, you can run multiple Ingress Controllers simultaneously. Use IngressClass resources to specify which controller manages which Ingress resources to avoid conflicts.

How do I secure my Ingress traffic?

By enabling TLS termination using Kubernetes secrets containing certificates and private keys. Additionally, use annotations to enforce security policies such as authentication and IP whitelisting.

What service types can be used to expose the Ingress Controller?

The common service types are LoadBalancer (for cloud environments), NodePort, or ClusterIP in combination with an external load balancer or proxy.

Does Ingress Controller support WebSocket and gRPC?

Yes, most modern Ingress Controllers, including the Nginx Ingress Controller, support WebSocket and gRPC protocols with appropriate configuration.

Conclusion

Setting up an Ingress Controller is a fundamental task for managing external access to Kubernetes services efficiently and securely. By following this tutorial, you now understand how to deploy the Nginx Ingress Controller, configure Ingress resources, and apply best practices to optimize your clusters traffic routing.

Leverage the tools and resources outlined here to monitor, secure, and maintain your Ingress infrastructure effectively. With a properly configured Ingress Controller, your Kubernetes applications will be accessible, performant, and scalable, meeting the demands of modern cloud-native environments.