Amazon EKS 접속 방법

노하람·2021년 10월 6일
0
post-thumbnail

오늘은 이미 SW(devops)팀에서 구축한 EKS에 접속하는 방법을
실습을 진행하며 알아보려고 합니다!

첫 파트인 EKS 관리 시스템 구축은 누구나 따라하실 수 있지만,
두번째 파트부터는 이미 만들어진 시스템을 활용하기 때문에 따라하셔도 접근권한이 없어서 실습이 불가능합니다.
관련 업무를 진행하실 때 진행순서만 참고해주세요!

MacOS에 aws CLI 및 config 등을 설정해서 사용할 수도 있겠지만,
Linux EC2 인스턴스를 생성하고 해당 인스턴스에 관리를 위한 설정을 구축하여,
다른 팀원들이 바로 사용할 수 있도록 해보겠습니다.

EKS 관리 시스템 구축

  1. 외부에서 AWS에 접근할 시스템(인스턴스)가 필요합니다. 보통 Linux를 사용합니다.

    • 윈도우에서는 wsl 등을 이용할 수 있습니다. 이번 실습에서는 리눅스 ec2 인스턴스를 생성하여 같이 진행해보도록 합시다.
    • MacOS는 Unix 기반이지만 Linux와는 명령어가 또 다르기 때문에, EC2 인스턴스를 생성하여 진행하도록 하겠습니다. 추후에 자원이 많이 필요하게 될지도 모르지만, 일단 프리티어로 생성하겠습니다.
  2. Linux EC2 인스턴스를 생성해봅시다.

    • AWS - EC2 - 인스턴스 - 인스턴스 시작을 클릭합니다.
    • 프리티어 중 Ubuntun 18.04(LTS) - 64비트(x86)버전을 선택하겠습니다.
    • 인스턴스 유형은 프리티어로 사용 가능한 t2.micro로 진행합니다. cpu 1개와 1GiB를 지원합니다. 설정 후 다음을 클릭합니다.
    • 인스턴스 세부 정보는 Default 설정을 그대로 놔두고 다음으로 넘어갑니다.
    • 마찬가지로 스토리지도 Default로 놔두고 넘어갑니다.
    • 태그는 필요하면 추가하고, 아니면 생략하고 넘어갑니다. 저는 팀의 k8s 관리 시스템이라는 것을 표시하기 위해 Name 태그만 추가하였습니다.
    • 보안그룹은 기존에 보안그룹이 있다면 해당 그룹을 선택해도 되고, 새로 생성해도 됩니다.
    • 검토를 끝내고 시작하기를 누릅니다.
    • aws 환경은 remote 로그인이 ssh key로만 가능합니다. key를 만들고 반드시 잘 관리해야 합니다. 보통 키는 한번 만들고 기존의 키를 재활용하여 사용합니다. 입력 후 반드시 키 페어 다운로드를 눌러 로컬 스토리지에 보관하고, 잃어버리거나 외부에 배포되지 않도록 조심합니다.
    • 인스턴스 시작을 누릅니다. 후에 인스턴스 보기를 누릅니다.
  3. Terminus(MacOS)를 이용하여 SSH 접속을 합니다.

    • 윈도우는 Xshell, Putty 등을 사용해도 됩니다. 개인이 익숙한 SSH 프로그램을 사용해주세요.
    • Elastic IP 기능을 활성화(aws 유료)하여 고정된 접속 IP를 만들 수 있습니다. 인스턴스를 중지했다 재시작하면 Public IP가 변경되어 IP를 확인하고 저장된 세션 정보를 바꿔야하는 번거로움이 있는데, 이를 해결할 수 있습니다.(저는 번거로움은 감수하고 그냥 변동되는 Public IP를 사용하겠습니다.)
    • 퍼블릭 IPv4 주소로 접속하겠습니다. 세션에 정보를 저장합니다. Label과 Address(ec2의 퍼블릭 IP), Username(ubuntu), Password(아까 저장한 pem키)를 설정해줍니다.

    • 첫 접속시 핑거프린트를 설정합니다. ADD AND CONTINUE를 눌러주시면 됩니다.
    • 새로 생성한 k8s 관리 시스템(ec2)에 ssh로 접속한 것을 확인할 수 있습니다.
    • 터미널 환경에서 Ctrl+L 키를 눌러 화면을 깨끗하게 정리할 수 있습니다.(=clear)

Linux EC2의 경우

ec2를 생성해서 진행하는 경우 아래를 진행해주세요. MacOS 환경에서 진행하는 경우 다음 섹션으로 이동해서 진행해주세요!

  1. EKS 관리 시스템(ec2)에 AWS CLI v2 설치
    - 아래 공식 문서를 따라 정리된 코드를 첨부합니다. 순서대로 실행하여 CLI를 설치해주세요.
    - 참고: https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-linux.html
      $ sudo apt-get install -y unzip
      $ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
      $ unzip awscliv2.zip
      $ sudo ./aws/install
          You can now run: /usr/local/bin/aws --version
      $ aws --version
      aws-cli/2.2.5 Python/3.8.8 Linux/4.4.0-19041-Microsoft exe/x86_64.ubuntu.20 prompt/off

  2. EKS 설치/운영 툴인 eksctl 설치
  $ 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
  0.68.0

  1. k8s 관리툴인 kubectl 설치
  $ curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-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
  Client Version: v1.19.6-eks-49a6c0

  1. Helm 설치
  $ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh
  $ chmod 700 get_helm.sh
  $ ./get_helm.sh

MacOS의 경우

  1. 브라우저에서 AWS CLI를 다운로드 합니다.(macOS pkg 파일)

  2. eksctl를 다운로드합니다. homebrew를 이용합니다.

      % /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
      % brew tap weaveworks/tap
      % brew install weaveworks/tap/eksctl
      % brew upgrade eksctl && brew link --overwrite eksctl
      % eksctl version
    • 혹시 아래와 같은 에러가 발생하면 빅서 문제이니 아래 코드를 실행하여 xcode를 설치해줍니다. 1시간 정도 걸린다고 하네요.
    softwareupdate --all --install --force
    sudo rm -rf /Library/Developer/CommandLineTools
    sudo xcode-select --install
  3. k8s 관리툴인 kubectl 설치

  $ curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.20.4/2021-04-12/bin/darwin/amd64/kubectl
  $ chmod +x ./kubectl
  $ mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH
  $ echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile
  $ kubectl version --short --client
  Client Version: v1.20.4-eks-6b7464
  1. Helm 설치
    • brew install helm

  1. AWS IAM 생성하기
    • AWS - IAM 접속
    • 사용자 - 사용자 추가 클릭
    • 관리 시스템 터미널에서 로그인할 수 있는 프로그래밍 방식 선택
    • 기존 정책 연결 - AdministratorAccess 선택
    • 태그 필요하면 추가하기
    • 검토 후 IAM 생성
    • 나온 액세스 키와 비밀 키를 따로 복사해두고, csv 저장도 해둡니다. 절대 노출되지 않도록 조심하세요!! 운영중엔 노출만 시키지 않고 한번만 만들고 계속 사용합니다.
  aws.amazon.com에서 - root 로그인후 IAM 생성
  사용자이름(User name*) : eks-mng-user
  프로그래밍 방식(Programmatic access) 선택
  기존 정책(Attach existing policies directly) : administrator
  태그 추가(Add tags (optional)) - <SKIP>
  [사용자만들기(Create User)] 버튼 클릭
  
  사용자 생성되면 csv다운로드 -액세스ID/엑세스키
  1. EKS 관리 시스템(ec2)에서 aws 관리할수 있도록 aws 계정(rnd-eks-mng-user) 등록
  $ aws configure
  AWS Access Key ID [None]: AKIASJ...E37V
  AWS Secret Access Key [None]: XLzhAqt...7g
  Default region name [None]: ap-northeast-2
  Default output format [None]: <ENTER>

  ubuntu@seongmi_lee:~$ cd .aws/
  ubuntu@seongmi_lee:~/.aws$ ls
  ubuntu@seongmi_lee:~/.aws$ cat config
  [default]
  region = ap-northeast-2
  ubuntu@seongmi_lee:~/.aws$ cat credentials
  [default]
  aws_access_key_id = AKIASJ...E37V
  aws_secret_access_key = XLzhAq...7g

  잘 연결되는지 확인
  ubuntu@seongmi_lee:~/.aws$ aws sts get-caller-identity
  {
      "UserId": "AID...KS26",
      "Account": "15..75",
      "Arn": "arn:aws:iam::158208647875:user/k8suser-console"
  }

클러스터에 대한 kubeconfig 파일을 생성(또는 기존 파일을 업데이트)

지금까지 위에서 진행한 사항은 개인적으로 사용할 EKS 환경을 구축하는 과정이었습니다.
이제 미리 DevOps 개발자가 만들어둔 EKS 구성을 받아와 사용하는 방법을 확인해보겠습니다.

  1. aws credential이 등록되어 있는지 확인합니다.

    • root 사용자에 대한 키가 필요합니다. 위에서 만든 rnd 팀 키가 아닙니다. 계정 생성 시 관리자가 부여해준 csv 파일을 참고해서 액세스 키 ID와 비밀 키를 입력해주세요! 이미 credential이 존재하면, 제가 생성한 것이기 때문에 넘어가셔도 됩니다.(RnD 팀의 경우)
    • cd ~/.aws
    • cat credential
  2. aws config를 확인해보고, 아래처럼 수정합니다.

    • cat config
    • vim config 후 아래 처럼 수정해주세요.
    [default]
    sts_regional_endpoints=regional
    region = ap-northeast-2
    output = yaml
    
    [profile environment-predict]
    role_arn = arn:aws:iam::174950111464:role/admin
    source_profile = default
    region = ap-northeast-2
    output = yaml

  3. 등록한 aws config의 profile을 사용해서 kubeconfig를 업데이트합니다.

    • 해당 클러스터는 이미 만들어져 있는 클러스터입니다.
    • aws eks update-kubeconfig 명령을 사용하여 해당 kubeconfig를 받아와 설정을 업데이트 시키는 과정입니다.
    $ aws eks update-kubeconfig \
      --name environment-predict(클러스터 이름) \
      --alias env-predict \
      --profile environment-predict
  4. --context를 사용해서 kubectl을 사용할 수 있습니다.

    • --context를 입력하지 않으면 default에 접근하게 됩니다.
    • 아까 설정을 받아온 env-predict(클러스터 alias)에서 노드 정보를 확인해봅시다.
    • kubectl get nodes --context env-predict
  5. Kubernetes IDE인 lens를 설치합니다.

  6. 이제 lens를 이용해 클러스터를 관리하겠습니다.

profile
MLOps, MLE 직무로 일하고 있습니다😍

0개의 댓글