데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      [AWS EKS-연재1] eksctl 을 사용한 AWS EKS 생성

      Thomas 22.02.23
      8,447 6 0

      AWS EKS 에 상용을 위한 Kubernetes 서비스 설정 시리즈

      1. eksctl을 사용한 AWS EKS 생성

      2. AWS EKS 에 Istio 설치 및 설정

      3. AWS EKS 에서 Istio 와 Application Load Balancer 연결

      4. Kubernetes 의 Resources 설정을 위한 VPA 및 Goldilocks 

      5. AWS EKS 의 Cluster Autoscaler 설정

      6. Loki를 이용한 손쉬운 Kubernetes Logging

      7. Kubernetes/Istio 를 위한 Datadog 설정

      8. Argo CD 설치 및 설정

       

      팀에서 Kubernetes/Istio 를 사용하며 Datadog 을 로깅/모니터링/APM/Alerting 으로 사용한다. 관련 된 내용을 다른 프로젝트에서 쉽게 사용할 수 있도록 8개의 연재로 기술블로그로 정리해보고자 한다.  


       

      AWS 에 EKS 생성을 위한 가장 손쉬운 방법은 eksctl 을 사용하는 것이다. 그리고 eksctl cli를 실행시킬 환경은 laptop 보다는 AWS 에 bastion 서버를 만들어서 그곳에서 실행하는걸 추천한다. (laptop 에 이런 저런 환경을 옮겨가면서 작업하다보면 실수한다. 그리고 관리도 힘들다)

       

      AWS User 생성

      우선 AWS IAM 에서 programatically 사용가능하도록 admin user를 만들고 해당 user 의 AWS Access Key ID 및 AWS Secret Access Key를 획득한다.


       

      Bastion 서버 생성

      그리고 AWS에 bastion 서버를 만들자. instance type은 t3.small 이어도 충분하다. (free tier 도 상관없다) 그리고 적절히 security group 을 만들어서 서버로 들어간다.


       

      kubectl 설치

      원하는 kubernetes 버전의 kubectl 설치 https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html

      $ curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.21.2/2021-07-05/bin/linux/amd64/kubectl
      $ chmod +x ./kubectl
      $ mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
      $ echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
      $ kubectl version --short --client
      

       

      aws cli 설치

      eksctl 을 사용하려면 AWS user의 credentil 설정이 필요하다. aws cli 를 설치한다. https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

      $ sudo apt install unzip
      $ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
      unzip awscliv2.zip
      sudo ./aws/install
      

       

      aws cli configuration 설정

      이제 aws cli 에 configuration 을 설정한다. 이때 위에서 획득한 credential을 사용한다. region 은 Seoul(ap-northeast-2)을 사용 https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html

      $ aws configure
      AWS Access Key ID [None]: ~~~
      AWS Secret Access Key [None]: ~~~
      Default region name [None]: ap-northeast-2
      Default output format [None]: json
      

       

      eksctl cli 설치

      eksctl cli 를 설치한다. https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html

      $ curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
      $ sudo mv /tmp/eksctl /usr/local/bin
      $ eksctl version
      

       

      EKS Cluster 생성

      eksctl cli로 EKS Cluster 를 생성한다.

      $ eksctl create cluster \
      --version 1.21 \
      --name eks-demo \
      --vpc-nat-mode HighlyAvailable \
      --node-private-networking \
      --region ap-northeast-2 \
      --node-type t3.medium \
      --nodes 2 \
      --with-oidc \
      --ssh-access \
      --ssh-public-key thomas \
      --managed
      
      • version: 사용할 Kubernetes 버전
      • vpc-nat-mode: kubernetes의 모든 outbound는 nat gateway를 통해 나가게 되는게 default option 은 single 이라 하나만 생성된다. 개발 환경에서는 상관없을거 같지만 운영에서는 각 subnet 마다 하나씩 만드는 HighAvailable 옵션을 사용한다.
      • node-private-networking: 해당 option 이 없으면 node group 이 public subnet 에 만들어진다. 보안을 위해 private subnet 에 만들어지도록 이 옵션을 사용한다.
      • node-type: 생성될 node의 instance 타입
      • nodes: 생성 될 node의 갯수

      cluster 가 잘 생성되었는지 확인한다.

      $ kubectl get nodes -o wide
      

       

      EKS 보안 관련 설정

      여기까지 하면 상용에서 사용할 수 있도록 HA를 고려한 secure 한 방법으로 Kubernets cluster 가 생성된다. 하지만 보안을 위해 한가지를 더 해주어야 한다. 현재 상태는 cluster endpoint가 public 하게 허용되어 있다. https://aws.amazon.com/blogs/containers/de-mystifying-cluster-networking-for-amazon-eks-worker-nodes/ https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html

      이를 제약하기 위해 private access 를 허용하고 CIDR 블록 제한으로 bastion 서버에서만 kubernetes 에 명령을 내릴 수 있도록 수정한다. bastion server의 Public IPv4 address 를 입력한다.

      $ eksctl utils update-cluster-endpoints --cluster=eks-demo --private-access=true --public-access=true --approve
      $ eksctl utils set-public-access-cidrs --cluster=eks-demo 1.1.1.1/32 --approve
      

      1.1.1.1/32 는 bastion 서버의 주소를 넣는다.

      사실 EKS Cluster 생성 작업은 eksctl의 --dry-run 옵션으로 yaml 파일을 만들어서 생성부터 EKS 보안 관련 설정까지 모두 옵션을 주고 한번에 만들 수도 있다.


       

      이제 이렇게 생성된 EKS Cluster 에 Istio를 설치하고 서비스를 deploy하면 바로 사용 가능하다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      Thomas 님의 최신 블로그

      더보기
      동영상 기고하기