Infra/AWS

[AWS] EKS 구성법

혬수 2024. 11. 19. 17:15

 

Amazon EKS란? 📌

  • Kubernetes

컨테이너를 효율적으로 관리할 수 있도록 하는 오픈소스 플랫폼

 

  • EKS (Elastic Kubernetes Service)

Kubernetes Control Plane을 설치, 운영 및 유지 관리할 필요가 없는 AWS 관리형 서비스

 

 

EKS 아키텍처 📌

 

EKS Control Plane (AWS Managed VPC)

  • AWS가 별도로 관리하는 인프라 → VPC의 세부 구성이나 네트워크 설정을 사용자가 직접 확인하거나 변경 X
  • 컨트롤 플레인이 다수의 가용영역에 배치 ⇒고가용성 보장
    • 하지만, 사용자 입장에서는 하나의 마스터 엔드포인트로 보임

 

EKS Data Plane (Custom VPC)

사용자가 직접 구성하고 관리

 

 

노드 구성 방식

  • 관리형 노드 그룹 (Managed Node Groups)
    • AWS에서 노드의 프로비저닝과 관리를 대신해주는 방법
    • 노드의 설정, 업데이트, 스케일링 등을 쉽게 관리
    • 비용 따로 들지 않음
  • 자체 관리형 노드 (Self-managed Nodes)
    • 사용자가 직접 EC2 인스턴스를 프로비저닝하고 관리하는 방식
    • 더 많은 커스터마이징과 세밀한 제어가 가능하지만, 관리 부담이 높음
    • 만약 특정 유형의 인스턴스를 사용하거나, 특별한 네트워크 설정이 필요시 사용
  • AWS Fargate
    • 서버리스 컴퓨팅 엔진으로, 사용자가 서버나 클러스터의 관리 없이 컨테이너를 실행할 수 있게 해줌
    • 사용한 컴퓨팅 자원에 대해서만 비용을 지불하는데, 서버 관리에 신경 쓰지 않고 간단한 웹 애플리케이션 또는 마이크로서비스를 빠르게 배포하고 싶을때 사용

 

Control Plane과 Data Plane 통신

AWS EKS에서 컨트롤 플레인과 워커 노드가 서로 다른 VPC에 배포되었음에도 통신이 가능한 이유

AWS PrivateLinkCross-Account ENI 같은 네트워킹 기술을 사용하기 때문 (클러스터 설정에 따라 둘 중 하나만 사용)

  • AWS PrivateLink
    • 컨트롤 플레인과 사용자 VPC 간의 비공개 네트워크 연결을 설정
    • 사용자 VPC 내에 인터페이스 엔드포인트를 생성하여 EKS API 서버와 연결
  • Cross-Account ENI
    • EKS 컨트롤 플레인은 사용자 VPC에 ENI를 생성하여, 워커 노드와 직접 통신

 

 

네트워크 📌

AWS VPC CNI

  • CNI (Container Network Interface)
    • Kubernetes에서 네트워크를 관리하기 위한 플러그인 표준
    • AWS EKS는 Amazon VPC CNI 플러그인을 사용하여 Kubernetes Pod가 VPC 네트워크와 통신
      • ↔ Calio, Flannel과 같은 클러스터 CNI

 

 

  • Amazon VPC CNI 플러그인을 설치하면 aws-node라는 Daemon set 생성
  • aws-node는 L-IPAM(Local IP Address Manager), CNI 플러그인으로 구성
    • L-IPAM은 필요 시 Warm Pool이라는 IP 주소 풀에서 Secondary IP를 미리 할당받아 워커 노드에 준비
    • ENI Slot
      • 1 → Primary IP : 노드의 IP
      • 2~4 → Secondary IP : 파드의 IP
    ⇒ ENI Slot을 구성하고, Pod에 Secondary IP를 할당하는 방식으로 ~
  • if. 전부 사용중이면, 새로운 ENI 생성

 

  • 장점
    • Pod들이 VPC 네트워크 대역 내의 IP 주소를 직접 사용하므로, 오버헤드가 적고 성능이 뛰어남
    • 추가적인 네트워크 변환이 필요 없음
  • 단점
    • IP 주소 제한

 

LoadBalancer

  • EKS 에서 k8s의 서비스 타입 중 하나인 LoadBalancer를 설정하면 자동적으로 AWS CLB가 생성
  • EKS 에서 k8s의 Ingress를 설정하면 자동적으로 AWS ALB가 생성
  • AWS LoadBalancer Controller를 설치한 상태에서, k8s 서비스 타입 중 하나인 LoadBalancer을 설정하면 AWS NLB 생성

 

AWS LoadBalancer Controller

EKS 클러스터를 위한 AWS Load Balancer를 관리하는 add-on

 

  • IP 모드
    • 애노테이션을 통해 NLB가 클러스터 내의 각 파드의 IP 주소를 직접 대상으로 삼도록 설정 → NLB는 파드의 IP로 직접 트래픽을 전달
    • IP 모드의 장점 → 직접 라우팅, 낮은 레이턴시, 효율적인 트래픽 분산
...
metadata:
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
...

 

 

배포 방법 📌

  • AWS 콘솔 수동 배포
  • eksctl
  • IaC
    • Terraform 등..

( 사실 관리 콘솔을 통한 수동 배포와 eksctl 방식 모두 Amazon EKS 배포 시 내부적으로 AWS CloudFormation이 사용 )

 

 

  • CloudFormation
    • AWS IaC 도구
    • Stack: 생성된 AWS 리소스 집합 → Stack 단위로 생성, 업데이트, 삭제 가능

 

 

실습 📌

Terraform과 eksctl을 활용하여 AWS EKS 클러스터를 구축하고, AWS Load Balancer Controller를 통해 NLB 및 ALB를 실습

 

https://github.com/ShimHyesu/KTB_TechSession

 

GitHub - ShimHyesu/KTB_TechSession: 2024.11.19_카카오테크 부트캠프 기술 세미나_클라우드 - EKS 설정법

2024.11.19_카카오테크 부트캠프 기술 세미나_클라우드 - EKS 설정법. Contribute to ShimHyesu/KTB_TechSession development by creating an account on GitHub.

github.com

 

 

 

참고

https://velog.io/@rockwellvinca/EKS-AWS-Load-Balancer-Controller-%EB%B6%80%ED%95%98%EB%B6%84%EC%82%B0-%ED%99%98%EA%B2%BD#aws-load-balancer-controller