Skip to main content

Command Palette

Search for a command to run...

AWS Day 43: Scaling and Managing Kubernetes Clusters with Amazon EKS

Updated
4 min readView as Markdown
AWS Day 43: Scaling and Managing Kubernetes Clusters with Amazon EKS
A

"I'm a 3rd-year Computer Engineering student at Marwadi University with skills in C++, web development (MERN stack), and DevOps tools like Kubernetes. I contribute to open-source projects and share tech knowledge on GitHub and LinkedIn. I'm learning cloud technologies and app deployment. As an Internshala Student Partner, I help others find jobs and courses." now currently focusing on #90DaysOfDevops

As part of my KodeKloud 100 Days of Cloud journey, Day 43 focused on creating and configuring an Amazon Elastic Kubernetes Service (EKS) cluster with a strong focus on security, availability, and controlled cluster configuration.

For this task, the Nautilus DevOps team needed an EKS cluster for a new Kubernetes-based application. The cluster had to use the latest stable Kubernetes version available in the lab, remain private from the public internet, and be deployed across multiple Availability Zones for better availability.

What is Amazon EKS?

Amazon Elastic Kubernetes Service (EKS) is a managed Kubernetes service provided by AWS.

With EKS, AWS manages the Kubernetes control plane infrastructure, while we can choose how the worker compute is provisioned using options such as:

  • Managed Node Groups

  • Self-managed nodes

  • AWS Fargate

  • EKS Auto Mode

EKS is commonly used for running containerized applications that require Kubernetes orchestration, automated scaling, service discovery, rolling deployments, and high availability.

In this task, the focus was on creating the EKS control plane with a secure network configuration rather than deploying application workloads.

Step 1: Create the EKS Cluster IAM Role

The first step was creating the IAM role required by the EKS control plane.

I opened:

AWS Console → IAM → Roles → Create role

For the trusted entity, I selected:

Trusted entity type: AWS service

Then selected:

Service: EKS

For the use case, I selected:

EKS - Cluster

This creates a trust relationship allowing the EKS service to assume the role.

I named the role:

eksClusterRole

The trust policy generated for the role allows the EKS service to assume the role:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "eks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

The cluster IAM role is used by the EKS control plane to interact with AWS resources required for cluster management.

Step 2: Start Creating the EKS Cluster

Next, I opened the Amazon EKS console and selected:

Create cluster

AWS provides different configuration approaches. For this task, I selected:

Custom configuration

I did not use the quick configuration because the task specifically required controlling the cluster networking and EKS Auto Mode settings.

Step 3: Disable EKS Auto Mode

Under the EKS Auto Mode section, I made sure that:

Use EKS Auto Mode = Disabled

EKS Auto Mode can automate several infrastructure operations, including provisioning compute resources and managing parts of the cluster infrastructure.

For this lab, Auto Mode was not required because the objective was to create the cluster with explicit configuration choices.

Keeping Auto Mode disabled also makes it clearer which components are being configured manually.

Step 4: Configure the Cluster Name

Under Cluster configuration, I entered:

xfusion-eks

The cluster name is important because it is used later with AWS CLI and Kubernetes tooling.

For example:

aws eks describe-cluster \
  --name xfusion-eks \
  --region us-east-1

Step 5: Select the Cluster IAM Role

For Cluster IAM role, I selected the role created earlier:

eksClusterRole

This connects the EKS control plane with the IAM permissions required to manage AWS resources on behalf of the cluster.

At this point, the basic cluster configuration was:

Cluster Name: xfusion-eks
IAM Role: eksClusterRole
EKS Auto Mode: Disabled

Step 6: Select the Kubernetes Version

The task required using the latest stable Kubernetes version available in the environment.

During this lab, the AWS console provided:

Kubernetes Version: 1.36

I selected Kubernetes 1.36.

Keeping the Kubernetes control plane on a supported and current version is important because newer Kubernetes releases provide updated features, fixes, and security improvements.

However, in a production environment, I would still verify application compatibility with the target Kubernetes version before upgrading.

Step 7: Configure Private Cluster Endpoint

This was one of the most important settings in the entire task.

Under Cluster endpoint access, AWS provides three options:

  • Public

  • Public and private

  • Private

I selected:

Private

With a private endpoint, the Kubernetes API server is accessible through the VPC rather than directly from the public internet.

This reduces the public attack surface of the Kubernetes control plane.

The configuration was:

Cluster endpoint access: Private

This is particularly useful for environments where Kubernetes administration should happen from controlled network locations such as:

  • Bastion hosts

  • VPN-connected networks

  • AWS Systems Manager-based administration

  • Corporate networks connected through AWS networking

  • Internal CI/CD infrastructure

One important operational consideration is that administrators must have network connectivity to the VPC in order to communicate with a private Kubernetes API endpoint.

Useful AWS EKS Commands

For future reference, these are some useful commands from this lab: