Kubernetes 관리 서비스를 제공하는 대형 클라우드 업체 중 AWS EKS를 통한 k8s 클러스터 생성 과정을 살펴보자.

 

출처 : https://docs.aws.amazon.com/eks/latest/userguide

 

 

첫째, 클러스터 생성

AWS CLI 혹은 eksctl 등으로 EKS 클러스터를 할 수 있는데 eksctl를 이용한 방법을 살펴보자. 그 이유는 eksctl은 클러스터 구성에 필요한 설정을 일반적인 수준에서 알아서 관리해준다. 좀 더 자세한 클러스터 튜닝을 하고 싶다면 AWS CLI를 이용하여 클러스터를 생성하는 것을 추천한다.

 

Prerequisites

- kubectl : A command line tool for working with Kubernetes clusters.

- eksctl : A command line tool for working with EKS clusters that automates many individual tasks.

 

클러스터 생성 옵션

- name : 클러스터 이름

- version : kubernetes 버전

- managed : Node를 Amazon EC2 인스턴스로 생성

- node-type : Amazon EC2 인스턴스 유형

- region : 클러스터 리전

eksctl create cluster \
--name my-cluster \
--version 1.xx \
--node-type t2.xx \
--region us-west-2 \
--with-oidc \
--ssh-access \
--ssh-public-key your-key
--managed

 

클러스터 생성 진행상황을 확인하고 싶다면 CloudFormation을 확인해보길 바란다.

 

클러스터 삭제 역시 아주 간단하다.

eksctl delete cluster --name cluster_name

 

이렇게 eksctl를 이용해서 쿠버네티스 클러스터 생성을 아주 쉽게 완료할 수 있다.

 

둘째, 기본적으로 추가되는 노드그룹 외에 노드그룹 생성

- cluster : 클러스터 이름

- region : 클러스터 리전

- name : 노드그룹 이름

- node-type : 노드그룹 Amazon EC2 인스턴스 유형

- nodes : 노드 요청 개수

- nodes-min : 최소 노드 개수

- nodes-max : 최대 노드 개수

- managed : Node를 Amazon EC2 인스턴스로 생성

eksctl create nodegroup \
  --cluster <my-cluster> \
  --region <region-code> \
  --name <my-mng> \
  --node-type <m5.large> \
  --nodes <3> \
  --nodes-min <2> \
  --nodes-max <4> \
  --ssh-access \
  --ssh-public-key <my-key>
  --managed
  
eksctl scale nodegroup --cluster=clusterName --nodes=desiredCount --name=nodegroupName --region region --nodes-min=3 --nodes-max=6

 

기본적으로 생성된 노드그룹은 아래 내용을 포함하고 있을 것이다.

- coredns : 쿠버네티스 클러스터의 DNS 역할을 수행할 수 있는, 유연하고 확장 가능한 DNS 서버이다. 서비스디스커버리에 활용됨.

- kube-proxy : worker node 사이의 container들의 커뮤니케이션 수단 제공 

- cni : Container Network Interface

- kubelet : master node와 컨테이너 상태 등에 대해서 커뮤니케이션 및 container를 제어하는 역할

 

셋째, kubectl을 이용하여 EKS 클러스터를 관리한다.

넷째, 원하는 워크로드를 생성한 EKS 클러스터에 배포한다.

 

자동으로 생성된 VPC 네트워크 구성에 대해서 살펴보도록 하자.

 

https://aws.amazon.com/ko/quickstart/architecture/vpc/

 

VPC(Amazon Virtual Private Cloud)

1. 인터넷게이트웨이(IGW)

- 응답을 받을때 private ip로 주소변환(NAT)

- enables inbound and outbound access to the internet

- 기타

2. 보안그룹

- SSH 접근 보안 설정

- control plane과 워커 노드그룹 사이 보안 설정

- 클러스터 노드 사이 보안 설정

- CNI 보안 설정

- 기타

3. Subnet

출처 : https://medium.com/awesome-cloud/aws-vpc-difference-between-internet-gateway-and-nat-gateway-c9177e710af6

Private subnet

기본적으로 외부와 차단되어 있고, 다른 서브넷과의 연결만 가능

- 라우팅 테이블

- 네트워크 ACL

- Amazon EC2

 

Public subnet

- NAT 게이트웨이 : 인터넷에서 들어오는 트래픽을 차단. private subnet의 인터넷 요청에 대한 결과를 전달.

NAT(Network Address Translation) : IP 패킷 헤더의 IP 주소를 변경하는 기능을 뜻함. DNAT, SNAT

- 라우팅 테이블

- 네트워크 ACL

- Amazon EC2

4. 로드밸런서

5. 기타

 

이렇게 eksctl를 이용하여 AWS EKS 클러스터 생성과정을 살펴보았다. 

 

이외에 Calico를 이용하여 Networkpolicy를 적용하는 등의 설정을 통해 클러스터 보안을 향상시킬 수 있다. 참고로 클러스터 밖에서 접속하는 트래픽에 대해서는 방화벽 설정을 할 수 없다. 그 이유는 외부에서 클러스터 내부로 들어오는 Source 주소가 변경되기 때문이다.

 

https://github.com/projectcalico/calico/issues/2088#issuecomment-411796428

 


출처

- [networkpolicy from outside] : https://github.com/projectcalico/calico/issues/2088

- [AWS EKS CNI plugins] : https://docs.aws.amazon.com/eks/latest/userguide/calico.html

- [Calico on Amazon EKS] : https://docs.aws.amazon.com/eks/latest/userguide/calico.html

- [Internet Gateway and Nat gateway] : https://medium.com/awesome-cloud/aws-vpc-difference-between-internet-gateway-and-nat-gateway-c9177e710af6

- [NAT Gateway]

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-nat-gateway.html

https://www.youtube.com/watch?v=ujXr0i5EoHE

- [Internet Gateway] : https://www.youtube.com/watch?v=u7obme-h3bc

- [kube-proxy] : https://kubernetes.io/docs/reference/command-line-tools-reference/kube-proxy/

- [CoreDNS] : https://kubernetes.io/ko/docs/tasks/administer-cluster/coredns/

- [EKS nodegroup] : https://docs.aws.amazon.com/eks/latest/userguide/create-managed-node-group.html

- [EKS nodegroup scale] : https://aws.amazon.com/ko/premiumsupport/knowledge-center/eks-worker-node-actions/

- [EKS란] : https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html

- [EKS with eksctl] : https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html

+ Recent posts