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 PrivateLink와 Cross-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
- 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
참고
'Cloud > AWS' 카테고리의 다른 글
[AWS/EKS] 다른 Namespace의 LB 사용하는 방법 (0) | 2024.12.02 |
---|---|
[AWS] Private Subnet에 있는 인스턴스 접속 방법 (feat. AWS SSM) (1) | 2024.11.29 |