Kubernetes 관리 서비스를 제공하는 대형 클라우드 업체 중 AWS EKS를 통한 k8s 클러스터 생성 과정을 살펴보자.
첫째, 클러스터 생성
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 네트워크 구성에 대해서 살펴보도록 하자.
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
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
'클라우드 컴퓨팅 > 쿠버네티스' 카테고리의 다른 글
Kubernetes 컨테이너 로그 집계 (0) | 2021.10.26 |
---|---|
Kubernetes Container Images (0) | 2021.10.24 |
Kubernetes Cluster Maintenance (0) | 2021.10.16 |
Kubernetes Application Lifecycle Management (0) | 2021.09.11 |
CKA(Certified Kubernetes Administrator) 시험 비중 (0) | 2021.09.11 |