Deploy a sample load balancer workload to EKS Auto Mode - Amazon EKS

Deploy a sample load balancer workload to EKS Auto Mode

This guide walks you through deploying a containerized version of the 2048 game on Amazon EKS, complete with load balancing and internet accessibility.

Prerequisites

  • An EKS Auto Mode cluster

  • kubectl configured to interact with your cluster

  • Appropriate IAM permissions for creating ALB resources

Step 1: Create the Namespace

First, create a dedicated namespace for the 2048 game application.

Create a file named 01-namespace.yaml:

apiVersion: v1 kind: Namespace metadata: name: game-2048

Apply the namespace configuration:

kubectl apply -f 01-namespace.yaml

Step 2: Deploy the Application

The application runs multiple replicas of the 2048 game container.

Create a file named 02-deployment.yaml:

apiVersion: apps/v1 kind: Deployment metadata: namespace: game-2048 name: deployment-2048 spec: selector: matchLabels: app.kubernetes.io/name: app-2048 replicas: 5 template: metadata: labels: app.kubernetes.io/name: app-2048 spec: containers: - image: public.ecr.aws/l6m2t8p7/docker-2048:latest imagePullPolicy: Always name: app-2048 ports: - containerPort: 80 resources: requests: cpu: "0.5"

Key components:

  • Deploys 5 replicas of the application

  • Uses a public ECR image

  • Requests 0.5 CPU cores per pod

  • Exposes port 80 for HTTP traffic

Apply the deployment:

kubectl apply -f 02-deployment.yaml

Step 3: Create the Service

The service exposes the deployment to the cluster network.

Create a file named 03-service.yaml:

apiVersion: v1 kind: Service metadata: namespace: game-2048 name: service-2048 spec: ports: - port: 80 targetPort: 80 protocol: TCP type: NodePort selector: app.kubernetes.io/name: app-2048

Key components:

  • Creates a NodePort service

  • Maps port 80 to the container’s port 80

  • Uses label selector to find pods

Apply the service:

kubectl apply -f 03-service.yaml

Step 4: Configure Load Balancing

You will set up an ingress to expose the application to the internet.

First, create the IngressClass. Create a file named 04-ingressclass.yaml:

apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: namespace: game-2048 labels: app.kubernetes.io/name: LoadBalancerController name: alb spec: controller: eks.amazonaws.com/alb

Then create the Ingress resource. Create a file named 05-ingress.yaml:

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: game-2048 name: ingress-2048 annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip spec: ingressClassName: alb rules: - http: paths: - path: / pathType: Prefix backend: service: name: service-2048 port: number: 80

Key components:

  • Creates an internet-facing ALB

  • Uses IP target type for direct pod routing

  • Routes all traffic (/) to the game service

Apply the ingress configurations:

kubectl apply -f 04-ingressclass.yaml kubectl apply -f 05-ingress.yaml

Step 5: Verify the Deployment

  1. Check that all pods are running:

    kubectl get pods -n game-2048
  2. Verify the service is created:

    kubectl get svc -n game-2048
  3. Get the ALB endpoint:

    kubectl get ingress -n game-2048

The ADDRESS field in the ingress output will show your ALB endpoint. Wait 2-3 minutes for the ALB to provision and register all targets.

Step 6: Access the Game

Open your web browser and browse to the ALB endpoint URL from the earlier step. You should see the 2048 game interface.

Step 7: Cleanup

To remove all resources created in this tutorial:

kubectl delete namespace game-2048

This will delete all resources in the namespace, including the deployment, service, and ingress resources.

What’s Happening Behind the Scenes

  1. The deployment creates 5 pods running the 2048 game

  2. The service provides stable network access to these pods

  3. EKS Auto Mode:

    • Creates an Application Load Balancer in AWS

    • Configures target groups for the pods

    • Sets up routing rules to direct traffic to the service

Troubleshooting

If the game doesn’t load:

  • Ensure all pods are running: kubectl get pods -n game-2048

  • Check ingress status: kubectl describe ingress -n game-2048

  • Verify ALB health checks: Check the target group health in AWS Console