3. NLB를 사용하는 Deployment 생성하기
Service에서 NLB를 사용해 외부로 애플리케이션을 노출하는 Deployment를 작성해 쿠버네티스의 동작을 테스트해보겠습니다.
쿠버네티스 YAML 파일을 여기에 첨부하지는 않지만, 필요하다면 Deployment와 Service 파일을 제 저장소 에서 내려받아 사용할 수 있습니다. 아래의 명령어를 입력해 1-echo-hostname.yaml 파일과 2-nlb-service.yaml 파일로부터 애플리케이션을 생성합니다.
root@aws-cli:/# git clone https://github.com/alicek106/aws-kubernetes-LB-example.git Cloning into 'aws-kubernetes-LB-example'... remote: Enumerating objects: 15, done. remote: Counting objects: 100% (15/15), done. remote: Compressing objects: 100% (11/11), done. remote: Total 15 (delta 4), reused 15 (delta 4), pack-reused 0 Unpacking objects: 100% (15/15), done. Checking connectivity... done. root@aws-cli:/# kubectl apply -f aws-kubernetes-LB-example/aws-nlb/1-echo-hostname.yaml deployment.apps/hostname-deployment created root@aws-cli:/# kubectl apply -f aws-kubernetes-LB-example/aws-nlb/2-nlb-service.yaml service/hostname-service created
잠시 후, Service의 목록을 출력해 NLB의 DNS를 확인합니다.
root@aws-cli:/# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hostname-service LoadBalancer 10.100.236.181 a5a9d0f01521911e99dc802f1aa799a4-0a0d0a2011811a3b.elb.ap-northeast-2.amazonaws.com 80:31456/TCP 4m kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 2h
해당 DNS로 요청을 보내보면, 컨테이너의 호스트이름을 출력하는 것을 볼 수 있습니다. 완성!
끝!
Deployment의 컨테이너들은 Amazon Linux 기반의 EC2의 인스턴스 상에서 실행되고 있으며, 직접 SSH로 접속해 확인할 수도 있습니다.
EC2 인스턴스에서 실행되는 EKS의 Worker 노드 그룹 Amazon Linux AMI를 기반으로 하기 때문에 접속 사용자로 ec2-user를 사용해야 합니다.
그러나 기본적으로 보안 그룹에 22번 포트가 열려있지는 않으므로, SSH로 접속하려면 Worker 노드 그룹의 22번 포트를 개방해줘야합니다. 갑작스럽게 클러스터에 문제가 생겨 TroubleShooting을 해야 한다면 필요하지 않을까 싶습니다.
4. 전체 구조도 기본적으로 EKS를 구축했을 때, 아래와 같이 구성됩니다. 어렵지는 않으나, Ingress가 추가되려면 Nginx Controller가 필요합니다.
5. Clean Up 개인적으로 생각하기에, EKS는 요금이 비싼 편에 속하는 서비스입니다. EKS Control Plane은 시간 당 0.2$가 청구되고, Worker 노드 그룹의 EC2 인스턴스는 별도로 요금이 청구됩니다. 테스트를 마쳤다면 반드시 삭제할 것을 추천드립니다 :D
[AWS Web UI]
EKS를 삭제한 뒤 Cloudformation의 스택 2개를 삭제합니다. Web UI에서 쉽게 삭제할 수 있으므로 별도로 설명하지 않아도 될 듯 합니다.
[AWS CLI]
CLI에서는 아래 명령어로 삭제할 수 있습니다. EKS 클러스터를 완전히 삭제하기까지는 5~10분의 시간이 걸립니다.
root@aws-cli:/# aws eks delete-cluster --region ap-northeast-2 --name alicek106-eks-cluster root@aws-cli:/# aws cloudformation delete-stack --stack-name eks-worker-group-stack --region ap-northeast-2 root@aws-cli:/# aws cloudformation delete-stack --stack-name eks-vpc-stack --region ap-northeast-2
https://alicek106.tistory.com/24