반응형
Kubernetes란? EKS란?
- Kubernetes란 컨테이너화 된 애플리케이션을 관리하고 운영하기 위한 오픈 소스 플랫폼입니다.
- Kubernetes는 Cluster의 상태를 관리하고 조정하는 Control Plane과 실제 컨테이너 애플리케이션이 실행되는 영역인 Data Plane(Worker Node)으로 구성됩니다.
- EKS(Elastic Kubernetes Service)는 Kubernetes의 Control Plane과 Worker Node들을 설치, 운영 및 유지 관리하지 않아도 되는 Managed Kubernetes 서비스입니다.
EKS Cluster Architecture
- EKS Cluster는 Control Plane과 Control Plane에 의해 관리되는 Node(Data Plane)들로 구성됩니다.
- EKS는 Kubernetes Cluster의 설치를 자동화하고 Controle Plane의 가용성과 확장성을 관리하여 Kubernetes를 더 쉽고 안정적으로 사용할 수 있습니다.
- EKS는 Certified Kubernetes Software Conformance으로 모든 표준 Kubernetes 플러그인과 도구를 사용할 수 있습니다.
또한 표준 Kubernetes에서 실행되는 모든 애플리케이션과 완벽하게 호환됩니다. - EKS Cluster Subnet이란 EKS Owned ENI가 배포되는 서브넷으로 EKS Cluster를 생성할때 지정하는 서브넷입니다.
- EKS Cluster Subnet은 Node가 실행되는 서브넷과 분리할 것을 권장합니다.
- EKS Cluster Subnet는 최소 6개의 IP 주소를 가져야하고 최소 16개의 IP 주소(/28)를 권장합니다.
- EKS Cluster Subnet은 최소한 2개 이상의 AZ에 있어야하고 프라이빗 서브넷을 사용할 것을 권장합니다.
- EKS는 EKS Cluster Subnet에 2~4개의 EKS Owned ENI를 생성합니다
- Cluster의 Kubernetes 버전이 업데이트되면 기존의 EKS Owned ENI는 삭제되고, 새 버전의 EKS Owned ENI를 생성합니다.
- EKS Cluster Security Group은 Control Plane과 Node 간에 통신을 제어하는 보안그룹으로 EKS Owned ENI에 연결됩니다.
- EKS Cluster Security Group은 eks-cluster-sg-<cluster-name>-<unique-id>라는 이름으로 Cluster가 생성될 때 생성됩니다.
- EKS Cluster Security Group은 기본 규칙으로 EKS Cluster Security Group을 Source로 하는 Inbound 규칙과 Any Open Outbound 규칙을 갖습니다.
EKS Control Plane
- Control Plane은 AWS의 관리 영역으로 AWS Managed Account와 VPC에서 실행됩니다.
- Control Plane은 Kubernetes API, etcd와 같은 Kubernetes 소프트웨어가 실행되는 EC2(Node)들로 구성되고,
EC2에 연결된 EBS 볼륨에 저장된 모든 데이터는 AWS KMS로 암호화됩니다. - Control Plane은 높은 가용성을 위해 3개 이상의 AZ를 사용하고 SPOF(Single Points Of Failure)가 존재하지 않도록 설계되었습니다.
- Control Plane은 높은 가용성을 위해 최소 2개의 API 서버와 3개의 etcd 인스턴스를 3개의 AZ에 분산 배치하고, 이를 AutoScaling Group으로 관리합니다.
- Control Plane은 API 서버와 etcd를 프라이빗 서브넷에서 실행하고 각 AZ마다 NAT Gateway를 구성합니다.
- Controle Plane은 EKS Owned ENI를 통해 Node의 kubelet과 통신합니다.
EKS Data Plane
- Data Plane(Node)은 AWS와 Customer의 공동 관리 영역으로 Customer Managed Account와 VPC에서 실행됩니다.
- Node는 컨테이너화된 애플리케이션을 실행하는 머신으로 Container runtime, kubelet, kube-proxy 등으로 구성됩니다.
- EKS의 Data Plane으로 EC2(Self Managed Node Group, Managed Node Group)와 Fargate를 사용할 수 있습니다.
EKS Clsuter Endpoint
- EKS Cluster Endpoint는 Kubernetes API 서버에 접근하기 위한 URL로 사용자는 kubectl과 같은 Kubernetes 관리 도구로 EKS Cluster Endpoint에 명령을 전달하여 클러스터 내의 리소스를 생성, 조회, 업데이트 등의 작업을 수행할 수 있습니다.
- EKS Cluster Endpoint는 NLB(Network Load Balancer)로 구현되어, 각 Control Plane Node의 kube-apiserver로 트래픽을 분산합니다.
- EKS는 Cluster Endpoint Option으로 Public, Public and Private, Private를 제공합니다.
- Public Cluster Endpoint는 인터넷에서 접근이 가능하고 Worker node도 인터넷을 통해 접근합니다. Public Endpoint는 Source IP를 Allow List로 제한할 수 있습니다.
- Public and Private Cluster Endpoint는 인터넷을 통해 접근이 가능하지만 Worker node는 VPC 내부의 EKS Owned ENI를 통해 접근합니다. 이때 Private Cluster Endpoint의 DNS는 EKS Owned ENI로 조회됩니다.
- Private Cluster Endpoint는 인터넷에서 접근이 불가능하고 오직 VPC 내부에서 EKS Owned ENI를 통해서만 접근이 가능합니다.
- EKS Cluster Endpoint는 DNS로 관리되며 Route53의 Public hosted zone과 Private hosted zone에서 각각 다른 IP 주소로 해석됩니다.
- kube-apiserver와 EKS API는 서로 다른 API입니다.
kube-apiserver는 kubectl 등으로 클러스터 내의 파드, 서비스, 배포 등의 리소스를 생성, 조회, 업데이트, 삭제할 때 사용하는 Kubernetes API 서버입니다.
EKS API는 AWS에서 제공하는 API로 AWS 콘솔, CLI 등을 통해 EKS 클러스터의 생성, 업데이트 및 삭제와 같은 인프라 관리 작업을 수행할 때 사용됩니다.
반응형