DEV Community

akhil mittal
akhil mittal

Posted on

Deploying Applications in Amazon EKS with NGINX Ingress

Here’s a step-by-step guide to deploying your application in Amazon EKS and exposing it using the NGINX Ingress Controller:

Step 1: Set Up NGINX Ingress Controller in EKS

  1. Install NGINX Ingress Controller using Helm: Ensure that Helm is installed and configured with your EKS cluster. Add the NGINX Ingress repository and install the NGINX Ingress Controller:
   helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
   helm repo update
   helm install nginx-ingress ingress-nginx/ingress-nginx --namespace ingress-nginx --create-namespace
Enter fullscreen mode Exit fullscreen mode

This command deploys the NGINX Ingress Controller with a LoadBalancer service type, making it accessible outside the EKS cluster.

  1. Verify the Installation: Confirm that the NGINX Ingress Controller is running and accessible:
   kubectl get pods -n ingress-nginx
   kubectl get svc -n ingress-nginx
Enter fullscreen mode Exit fullscreen mode

Note the external IP assigned to the nginx-ingress-controller service. This IP will be used to access your applications.

Step 2: Deploy Your Application in EKS

  1. Create a Deployment: Write a YAML file (e.g., myapp-deployment.yaml) to define your application deployment in Kubernetes. Here’s a basic example:
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: myapp
     namespace: default
   spec:
     replicas: 2
     selector:
       matchLabels:
         app: myapp
     template:
       metadata:
         labels:
           app: myapp
       spec:
         containers:
         - name: myapp-container
           image: your-docker-image:latest
           ports:
           - containerPort: 80
Enter fullscreen mode Exit fullscreen mode

Apply this deployment:

   kubectl apply -f myapp-deployment.yaml
Enter fullscreen mode Exit fullscreen mode
  1. Create a Service for Your Application: To expose your application within the cluster, create a ClusterIP service (e.g., myapp-service.yaml):
   apiVersion: v1
   kind: Service
   metadata:
     name: myapp-service
     namespace: default
   spec:
     selector:
       app: myapp
     ports:
     - protocol: TCP
       port: 80
       targetPort: 80
     type: ClusterIP
Enter fullscreen mode Exit fullscreen mode

Apply this service:

   kubectl apply -f myapp-service.yaml
Enter fullscreen mode Exit fullscreen mode

Step 3: Configure Ingress for External Access

  1. Create an Ingress Resource: The Ingress resource defines how external traffic will reach your application through the NGINX Ingress Controller. Create an Ingress YAML file (e.g., myapp-ingress.yaml):
   apiVersion: networking.k8s.io/v1
   kind: Ingress
   metadata:
     name: myapp-ingress
     namespace: default
     annotations:
       nginx.ingress.kubernetes.io/rewrite-target: /
   spec:
     rules:
     - host: your-domain.com
       http:
         paths:
         - path: /
           pathType: Prefix
           backend:
             service:
               name: myapp-service
               port:
                 number: 80
Enter fullscreen mode Exit fullscreen mode

Replace your-domain.com with your actual domain. If you don’t have a domain, you can use the external IP address of the NGINX Ingress Controller for testing.

Apply this Ingress resource:

   kubectl apply -f myapp-ingress.yaml
Enter fullscreen mode Exit fullscreen mode
  1. Update DNS (Optional): If you’re using a domain, create a DNS A record pointing to the external IP of the NGINX Ingress Controller. This allows you to access your application at http://your-domain.com.

Step 4: Access the Application

  1. Test the Setup:
    Open a browser and navigate to http://your-domain.com. You should see your application’s web page, confirming that the NGINX Ingress Controller is routing traffic correctly to your application.

  2. Verify Ingress Logs (Optional):
    If you encounter issues, check the logs of the Ingress Controller to troubleshoot:

   kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
Enter fullscreen mode Exit fullscreen mode

Summary

  • Deploy NGINX Ingress Controller to expose services externally.
  • Deploy your application as a Deployment and expose it via a ClusterIP Service.
  • Create an Ingress resource to route external traffic to your application through the NGINX Ingress Controller.

This setup provides a flexible way to manage and expose applications in Kubernetes, especially in production-grade environments.

👋 Kindness is contagious

Please leave your appreciation by commenting on this post!

It takes one minute and is worth it for your career.

Get started

Thank you!

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay