MCPκ°€ ν¬ν•¨λœ πŸš€ Amazon EKS β€” AWS의 AI 기반 μΏ λ²„λ„€ν‹°μŠ€ 관리

μž‘μ„±μž

μΉ΄ν…Œκ³ λ¦¬:

← ν”Όλ“œλ‘œ
DEV Community · Syed Kashif Ali · 2026-08-09 개발(SW)

πŸš€ Amazon EKS β€” Zero to Production Roadmap

  1. Architecture

Core components:

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

  1. Create EKS with Terraform

Recommended structure:

eks-project/
β”œβ”€β”€ main.tf
β”œβ”€β”€ variables.tf
β”œβ”€β”€ outputs.tf
β”œβ”€β”€ providers.tf
β”œβ”€β”€ terraform.tfvars
└── modules/
β”œβ”€β”€ vpc/
└── eks/

Your Terraform should create:

VPC
β”œβ”€β”€ Internet Gateway
β”œβ”€β”€ NAT Gateway
β”œβ”€β”€ Public Subnets
β”œβ”€β”€ Private Subnets
└── Route Tables

EKS
β”œβ”€β”€ Control Plane
β”œβ”€β”€ IAM Roles
β”œβ”€β”€ Managed Node Group
└── EKS Add-ons

For production, place worker nodes in private subnets.

  1. Verify AWS Authentication

Before touching Kubernetes:

aws sts get-caller-identity

You should get your AWS identity.

Then:

aws eks update-kubeconfig \
–region ap-south-1 \
–name

Verify:

kubectl config current-context

Then:

kubectl get nodes

Expected:

NAME STATUS ROLES
ip-10-0-1-xxx.ec2.internal Ready
ip-10-0-2-xxx.ec2.internal Ready

  1. EKS Authentication

Think about authentication in two layers:

IAM
β”‚
β”‚ Authentication
β–Ό
EKS API Server
β”‚
β”‚ Authorization
β–Ό
Kubernetes RBAC
Authentication

AWS asks:

Who are you?

Example:

aws sts get-caller-identity
Authorization

Kubernetes asks:

What are you allowed to do?

Example:

kubectl auth can-i get pods

This distinction is very important in EKS interviews.

  1. EKS Access Entry

For modern EKS clusters, use EKS Access Entries where possible.

Conceptually:

IAM User / IAM Role
β”‚
β–Ό
EKS Access Entry
β”‚
β–Ό
Access Policy / Kubernetes permissions
β”‚
β–Ό
Kubernetes API

For example, an IAM role can be granted administrative access to the cluster.

  1. Kubernetes RBAC

RBAC controls permissions inside Kubernetes.

There are four important objects:

Role
ClusterRole
RoleBinding
ClusterRoleBinding
Role

Namespace-specific permissions.

Example:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: developer-role
namespace: dev
rules:

  • apiGroups: [“”] resources: [“pods”] verbs: [“get”, “list”, “watch”]

This allows a user to:

GET pods
LIST pods
WATCH pods

but not:

DELETE pods
CREATE pods

  1. RoleBinding

Connect the user to the Role:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: developer-binding
namespace: dev
subjects:

  • kind: User name: ali apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: developer-role apiGroup: rbac.authorization.k8s.io

Apply:

kubectl apply -f role.yaml
kubectl apply -f rolebinding.yaml

Test:

kubectl auth can-i get pods -n dev –as=ali

Expected:

yes

Test something unauthorized:

kubectl auth can-i delete deployment -n dev –as=ali

Expected:

no

  1. VPC CNI

This is one of the most important EKS concepts.

AWS VPC CNI gives Kubernetes pods networking through the AWS VPC.

EKS Node
β”‚
β”œβ”€β”€ Primary ENI
β”‚
β”œβ”€β”€ Secondary ENI
β”‚
β”œβ”€β”€ Pod IP
β”‚
β”œβ”€β”€ Pod IP
β”‚
└── Pod IP

Check it:

kubectl get pods -n kube-system

Look for:

aws-node-xxxxx

Check:

kubectl get daemonset aws-node -n kube-system

  1. Why VPC CNI Matters

Suppose your node has:

10.0.1.10

A pod may receive:

10.0.1.50

That IP comes from the VPC networking system.

Therefore your pods can communicate with AWS resources such as:

RDS
ElastiCache
ALB
S3 via VPC endpoints
Secrets Manager via VPC endpoints

  1. Deploy an Application

Example:

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
– name: nginx
image: nginx:latest
ports:
– containerPort: 80

Apply:

kubectl apply -f deployment.yaml

Check:

kubectl get pods

  1. Service

Expose the pods internally:

apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
– port: 80
targetPort: 80
type: ClusterIP

Then:

kubectl apply -f service.yaml

Check:

kubectl get svc

  1. ALB Ingress

For external traffic:

Internet
β”‚
β–Ό
AWS ALB
β”‚
β–Ό
Kubernetes Ingress
β”‚
β–Ό
Service
β”‚
β–Ό
Pods

You’ll normally use the AWS Load Balancer Controller for this.

  1. Production Application Architecture

For your DevOps project, a good architecture is:

                Internet
                   β”‚
                   β–Ό
                Route 53
                   β”‚
                   β–Ό
                AWS ALB
                   β”‚
             β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”
             β”‚   Ingress β”‚
             β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜
                   β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”
          β”‚                 β”‚
      Frontend           Backend
          β”‚                 β”‚
          β”‚            β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”
          β”‚            β”‚         β”‚
          β”‚           RDS      Redis
          β”‚
          β–Ό
         Pods

Enter fullscreen mode Exit fullscreen mode

  1. CI/CD

Your final pipeline can be:

Developer
β”‚
β–Ό
GitHub
β”‚
β–Ό
GitHub Actions
β”‚
β”œβ”€β”€ Test
β”œβ”€β”€ SonarQube
β”œβ”€β”€ Docker Build
β”œβ”€β”€ Docker Push
β”‚
β–Ό
Amazon ECR
β”‚
β–Ό
EKS
β”‚
β–Ό
Rolling Deployment

Use GitHub OIDC β†’ AWS IAM Role rather than storing long-lived AWS access keys.

  1. Final Production Flow GitHub β”‚ β–Ό GitHub Actions β”‚ OIDC Authentication β”‚ β–Ό AWS IAM β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β–Ό β–Ό ECR EKS β”‚ β”‚ Docker Image Kubernetes β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ Ingress Services β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό Pods β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β–Ό β–Ό β–Ό RDS Redis AWS APIs

μ›λ¬Έμ—μ„œ 계속 β†—

μ½”λ©˜νŠΈ

λ‹΅κΈ€ 남기기

이메일 μ£Όμ†ŒλŠ” κ³΅κ°œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•„μˆ˜ ν•„λ“œλŠ” *둜 ν‘œμ‹œλ©λ‹ˆλ‹€