<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Syed Kashif Ali</title>
    <description>The latest articles on DEV Community by Syed Kashif Ali (@syed_kashifali_2a9fe52dd).</description>
    <link>https://dev.to/syed_kashifali_2a9fe52dd</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3415073%2Ffcb150a9-4d1e-4c32-a68e-cec672186e7d.jpg</url>
      <title>DEV Community: Syed Kashif Ali</title>
      <link>https://dev.to/syed_kashifali_2a9fe52dd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/syed_kashifali_2a9fe52dd"/>
    <language>en</language>
    <item>
      <title>🚀 Amazon EKS with MCP — AI-Powered Kubernetes Management on AWS</title>
      <dc:creator>Syed Kashif Ali</dc:creator>
      <pubDate>Sun, 09 Aug 2026 13:27:03 +0000</pubDate>
      <link>https://dev.to/syed_kashifali_2a9fe52dd/amazon-eks-with-mcp-ai-powered-kubernetes-management-on-aws-130c</link>
      <guid>https://dev.to/syed_kashifali_2a9fe52dd/amazon-eks-with-mcp-ai-powered-kubernetes-management-on-aws-130c</guid>
      <description>&lt;p&gt;🚀 Amazon EKS — Zero to Production Roadmap&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Architecture&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvdcc5pqquenllay087gc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvdcc5pqquenllay087gc.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Core components:&lt;/p&gt;

&lt;p&gt;EKS Control Plane&lt;br&gt;
Managed Node Groups&lt;br&gt;
VPC&lt;br&gt;
Private/Public Subnets&lt;br&gt;
VPC CNI&lt;br&gt;
CoreDNS&lt;br&gt;
kube-proxy&lt;br&gt;
AWS Load Balancer Controller&lt;br&gt;
EBS CSI Driver&lt;br&gt;
IAM / EKS Access Entries&lt;br&gt;
Kubernetes RBAC&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create EKS with Terraform&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Recommended structure:&lt;/p&gt;

&lt;p&gt;eks-project/&lt;br&gt;
├── main.tf&lt;br&gt;
├── variables.tf&lt;br&gt;
├── outputs.tf&lt;br&gt;
├── providers.tf&lt;br&gt;
├── terraform.tfvars&lt;br&gt;
└── modules/&lt;br&gt;
    ├── vpc/&lt;br&gt;
    └── eks/&lt;/p&gt;

&lt;p&gt;Your Terraform should create:&lt;/p&gt;

&lt;p&gt;VPC&lt;br&gt;
 ├── Internet Gateway&lt;br&gt;
 ├── NAT Gateway&lt;br&gt;
 ├── Public Subnets&lt;br&gt;
 ├── Private Subnets&lt;br&gt;
 └── Route Tables&lt;/p&gt;

&lt;p&gt;EKS&lt;br&gt;
 ├── Control Plane&lt;br&gt;
 ├── IAM Roles&lt;br&gt;
 ├── Managed Node Group&lt;br&gt;
 └── EKS Add-ons&lt;/p&gt;

&lt;p&gt;For production, place worker nodes in private subnets.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Verify AWS Authentication&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Before touching Kubernetes:&lt;/p&gt;

&lt;p&gt;aws sts get-caller-identity&lt;/p&gt;

&lt;p&gt;You should get your AWS identity.&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;aws eks update-kubeconfig \&lt;br&gt;
  --region ap-south-1 \&lt;br&gt;
  --name &lt;/p&gt;

&lt;p&gt;Verify:&lt;/p&gt;

&lt;p&gt;kubectl config current-context&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;kubectl get nodes&lt;/p&gt;

&lt;p&gt;Expected:&lt;/p&gt;

&lt;p&gt;NAME                          STATUS   ROLES&lt;br&gt;
ip-10-0-1-xxx.ec2.internal   Ready    &lt;br&gt;
ip-10-0-2-xxx.ec2.internal   Ready    &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;EKS Authentication&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Think about authentication in two layers:&lt;/p&gt;

&lt;p&gt;IAM&lt;br&gt;
 │&lt;br&gt;
 │ Authentication&lt;br&gt;
 ▼&lt;br&gt;
EKS API Server&lt;br&gt;
 │&lt;br&gt;
 │ Authorization&lt;br&gt;
 ▼&lt;br&gt;
Kubernetes RBAC&lt;br&gt;
Authentication&lt;/p&gt;

&lt;p&gt;AWS asks:&lt;/p&gt;

&lt;p&gt;Who are you?&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;aws sts get-caller-identity&lt;br&gt;
Authorization&lt;/p&gt;

&lt;p&gt;Kubernetes asks:&lt;/p&gt;

&lt;p&gt;What are you allowed to do?&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;kubectl auth can-i get pods&lt;/p&gt;

&lt;p&gt;This distinction is very important in EKS interviews.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;EKS Access Entry&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For modern EKS clusters, use EKS Access Entries where possible.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;/p&gt;

&lt;p&gt;IAM User / IAM Role&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
EKS Access Entry&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
Access Policy / Kubernetes permissions&lt;br&gt;
        │&lt;br&gt;
        ▼&lt;br&gt;
Kubernetes API&lt;/p&gt;

&lt;p&gt;For example, an IAM role can be granted administrative access to the cluster.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kubernetes RBAC&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;RBAC controls permissions inside Kubernetes.&lt;/p&gt;

&lt;p&gt;There are four important objects:&lt;/p&gt;

&lt;p&gt;Role&lt;br&gt;
ClusterRole&lt;br&gt;
RoleBinding&lt;br&gt;
ClusterRoleBinding&lt;br&gt;
Role&lt;/p&gt;

&lt;p&gt;Namespace-specific permissions.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;apiVersion: rbac.authorization.k8s.io/v1&lt;br&gt;
kind: Role&lt;br&gt;
metadata:&lt;br&gt;
  name: developer-role&lt;br&gt;
  namespace: dev&lt;br&gt;
rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This allows a user to:&lt;/p&gt;

&lt;p&gt;GET pods&lt;br&gt;
LIST pods&lt;br&gt;
WATCH pods&lt;/p&gt;

&lt;p&gt;but not:&lt;/p&gt;

&lt;p&gt;DELETE pods&lt;br&gt;
CREATE pods&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;RoleBinding&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Connect the user to the Role:&lt;/p&gt;

&lt;p&gt;apiVersion: rbac.authorization.k8s.io/v1&lt;br&gt;
kind: RoleBinding&lt;br&gt;
metadata:&lt;br&gt;
  name: developer-binding&lt;br&gt;
  namespace: dev&lt;br&gt;
subjects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;kind: User
name: ali
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: developer-role
apiGroup: rbac.authorization.k8s.io&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apply:&lt;/p&gt;

&lt;p&gt;kubectl apply -f role.yaml&lt;br&gt;
kubectl apply -f rolebinding.yaml&lt;/p&gt;

&lt;p&gt;Test:&lt;/p&gt;

&lt;p&gt;kubectl auth can-i get pods -n dev --as=ali&lt;/p&gt;

&lt;p&gt;Expected:&lt;/p&gt;

&lt;p&gt;yes&lt;/p&gt;

&lt;p&gt;Test something unauthorized:&lt;/p&gt;

&lt;p&gt;kubectl auth can-i delete deployment -n dev --as=ali&lt;/p&gt;

&lt;p&gt;Expected:&lt;/p&gt;

&lt;p&gt;no&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;VPC CNI&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is one of the most important EKS concepts.&lt;/p&gt;

&lt;p&gt;AWS VPC CNI gives Kubernetes pods networking through the AWS VPC.&lt;/p&gt;

&lt;p&gt;EKS Node&lt;br&gt;
   │&lt;br&gt;
   ├── Primary ENI&lt;br&gt;
   │&lt;br&gt;
   ├── Secondary ENI&lt;br&gt;
   │&lt;br&gt;
   ├── Pod IP&lt;br&gt;
   │&lt;br&gt;
   ├── Pod IP&lt;br&gt;
   │&lt;br&gt;
   └── Pod IP&lt;/p&gt;

&lt;p&gt;Check it:&lt;/p&gt;

&lt;p&gt;kubectl get pods -n kube-system&lt;/p&gt;

&lt;p&gt;Look for:&lt;/p&gt;

&lt;p&gt;aws-node-xxxxx&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;p&gt;kubectl get daemonset aws-node -n kube-system&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Why VPC CNI Matters&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Suppose your node has:&lt;/p&gt;

&lt;p&gt;10.0.1.10&lt;/p&gt;

&lt;p&gt;A pod may receive:&lt;/p&gt;

&lt;p&gt;10.0.1.50&lt;/p&gt;

&lt;p&gt;That IP comes from the VPC networking system.&lt;/p&gt;

&lt;p&gt;Therefore your pods can communicate with AWS resources such as:&lt;/p&gt;

&lt;p&gt;RDS&lt;br&gt;
ElastiCache&lt;br&gt;
ALB&lt;br&gt;
S3 via VPC endpoints&lt;br&gt;
Secrets Manager via VPC endpoints&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deploy an Application&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;apiVersion: apps/v1&lt;br&gt;
kind: Deployment&lt;br&gt;
metadata:&lt;br&gt;
  name: nginx&lt;br&gt;
spec:&lt;br&gt;
  replicas: 3&lt;br&gt;
  selector:&lt;br&gt;
    matchLabels:&lt;br&gt;
      app: nginx&lt;br&gt;
  template:&lt;br&gt;
    metadata:&lt;br&gt;
      labels:&lt;br&gt;
        app: nginx&lt;br&gt;
    spec:&lt;br&gt;
      containers:&lt;br&gt;
        - name: nginx&lt;br&gt;
          image: nginx:latest&lt;br&gt;
          ports:&lt;br&gt;
            - containerPort: 80&lt;/p&gt;

&lt;p&gt;Apply:&lt;/p&gt;

&lt;p&gt;kubectl apply -f deployment.yaml&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;p&gt;kubectl get pods&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Service&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Expose the pods internally:&lt;/p&gt;

&lt;p&gt;apiVersion: v1&lt;br&gt;
kind: Service&lt;br&gt;
metadata:&lt;br&gt;
  name: nginx-service&lt;br&gt;
spec:&lt;br&gt;
  selector:&lt;br&gt;
    app: nginx&lt;br&gt;
  ports:&lt;br&gt;
    - port: 80&lt;br&gt;
      targetPort: 80&lt;br&gt;
  type: ClusterIP&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;kubectl apply -f service.yaml&lt;/p&gt;

&lt;p&gt;Check:&lt;/p&gt;

&lt;p&gt;kubectl get svc&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ALB Ingress&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For external traffic:&lt;/p&gt;

&lt;p&gt;Internet&lt;br&gt;
   │&lt;br&gt;
   ▼&lt;br&gt;
AWS ALB&lt;br&gt;
   │&lt;br&gt;
   ▼&lt;br&gt;
Kubernetes Ingress&lt;br&gt;
   │&lt;br&gt;
   ▼&lt;br&gt;
Service&lt;br&gt;
   │&lt;br&gt;
   ▼&lt;br&gt;
Pods&lt;/p&gt;

&lt;p&gt;You'll normally use the AWS Load Balancer Controller for this.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Production Application Architecture&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For your DevOps project, a good architecture is:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                Internet
                   │
                   ▼
                Route 53
                   │
                   ▼
                AWS ALB
                   │
             ┌─────┴─────┐
             │   Ingress │
             └─────┬─────┘
                   │
          ┌────────┴────────┐
          │                 │
      Frontend           Backend
          │                 │
          │            ┌────┴────┐
          │            │         │
          │           RDS      Redis
          │
          ▼
         Pods
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your final pipeline can be:&lt;/p&gt;

&lt;p&gt;Developer&lt;br&gt;
    │&lt;br&gt;
    ▼&lt;br&gt;
GitHub&lt;br&gt;
    │&lt;br&gt;
    ▼&lt;br&gt;
GitHub Actions&lt;br&gt;
    │&lt;br&gt;
    ├── Test&lt;br&gt;
    ├── SonarQube&lt;br&gt;
    ├── Docker Build&lt;br&gt;
    ├── Docker Push&lt;br&gt;
    │&lt;br&gt;
    ▼&lt;br&gt;
Amazon ECR&lt;br&gt;
    │&lt;br&gt;
    ▼&lt;br&gt;
EKS&lt;br&gt;
    │&lt;br&gt;
    ▼&lt;br&gt;
Rolling Deployment&lt;/p&gt;

&lt;p&gt;Use GitHub OIDC → AWS IAM Role rather than storing long-lived AWS access keys.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Final Production Flow
                GitHub
                   │
                   ▼
            GitHub Actions
                   │
             OIDC Authentication
                   │
                   ▼
                AWS IAM
                   │
        ┌──────────┴──────────┐
        │                     │
        ▼                     ▼
       ECR                   EKS
        │                     │
   Docker Image          Kubernetes
                              │
                     ┌────────┴────────┐
                     │                 │
                  Ingress          Services
                     │                 │
                     └────────┬────────┘
                              │
                              ▼
                             Pods
                              │
                ┌─────────────┼─────────────┐
                ▼             ▼             ▼
               RDS         Redis        AWS APIs&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>aws</category>
      <category>awschallenge</category>
    </item>
  </channel>
</rss>
