Deploying applications on cloud platforms has become a norm for modern software development, providing scalability, reliability, and ease of management. This comprehensive guide will walk us through the steps to deploy the popular 2048 game on Amazon Web Services (AWS) Elastic Kubernetes Service (EKS) using Fargate. This approach ensures a serverless, scalable, and highly available deployment.

Configuring AWS EKS with Fargate

Step 1: Setting Up Your AWS Environment Before deploying, ensure you have an AWS account with the necessary permissions to create EKS clusters and Fargate profiles. Install the AWS CLI and configure it with your credentials.

Step 2: Creating an EKS Cluster Use the AWS Management Console or CLI to create an EKS cluster. Ensure your cluster is designed in a region that supports Fargate.

aws eks create-cluster –name 2048-game-cluster –region <your-region> –role-arn <EKS-service-role-ARN> –resources-vpc-config subnetIds=<subnet-ids>,securityGroupIds=<security-group-ids>

Step 3: Configuring Fargate Profile Create a Fargate profile for your EKS cluster. This profile allows EKS to schedule pods on Fargate.

aws eks create-fargate-profile –cluster-name 2048-game-cluster –fargate-profile-name 2048-game-profile –pod-execution-role-arn <Fargate-pod-role-ARN> –subnets <subnet-ids> –selectors namespace=default

 

Integrating OpenID Connect (OIDC) Provider

Step 4: Associating OIDC Provider with Your Cluster OIDC enables secure authentication and authorization. To manage access securely, associate an OIDC provider with your EKS cluster.

eksctl utils associate-iam-oidc-provider –region <your-region> –cluster 2048-game-cluster –approve

Step 5: Configuring Service Accounts with IAM Roles Create IAM roles for your Kubernetes service accounts to enable fine-grained permissions.

eksctl create iamserviceaccount –name 2048-service-account –namespace default –cluster 2048-game-cluster –attach-policy-arn arn:aws:iam::<account-id>:policy/<policy-name> –approve

Managing Traffic with Ingress and Load Balancing

Step 6: Setting Up Ingress Controller Install an ingress controller to manage external access to your application. NGINX is a popular choice.

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/aws/deploy.yaml

Step 7: Configuring Ingress Resources Define ingress resources to route traffic to your 2048 game application.

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

  name: 2048-ingress

  namespace: default

spec:

  rules:

    – host: <your-domain>

      http:

        paths:

          – path: /

            pathType: Prefix

            backend:

              service:

                name: 2048-service

                port:

                  number: 80

Launching the 2048 Game Application

Step 8: Deploying the Application Create Kubernetes deployment and service manifests for the 2048 game application.

apiVersion: apps/v1

kind: Deployment

metadata:

  name: 2048-deployment

  namespace: default

spec:

  replicas: 2

  selector:

    matchLabels:

      app: 2048

  template:

    metadata:

      labels:

        app: 2048

    spec:

      containers:

      – name: 2048

        image: alexwhen/docker-2048

        ports:

        – containerPort: 80

apiVersion: v1

kind: Service

metadata:

  name: 2048-service

  namespace: default

spec:

  ports:

  – port: 80

    targetPort: 80

  selector:

    app: 2048

  type: LoadBalancer

Establishing Ingress Settings

Step 9: Applying Ingress Settings Apply the ingress settings to expose your application to the internet.

kubectl apply -f 2048-ingress.yaml

Key Benefits of the Deployment

  1. Scalability: Automatically scale your application based on traffic.
  2. Cost-Efficiency: Pay for computing resources only when your pods are running.
  3. Simplified Management: Use Kubernetes to manage deployments, scaling, and operations.
  4. Enhanced Security: Secure your application with OIDC and fine-grained IAM roles.

Challenges Faced and Insights Gained

  • Configuration Complexity: Setting up EKS with Fargate requires multiple steps and careful configuration.
  • Resource Limits: Fargate has certain limits on resources that may affect the performance of highly demanding applications.
  • Ingress and Load Balancing: Proper configuration of ingress resources and load balancing can be challenging but is crucial for managing traffic effectively.

References

Quickstart: Deploy a web app and store data

Route application and HTTP traffic with Application Load Balancers