이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

클라우드/AWS

AWS Kubernetes (EKS)

이쿠우우 2021. 2. 23. 21:06
반응형

 

 

 

AWS EKS 란?

 

Amazon Elastic Kubernetes Service (Amazon EKS).

AWS 에서 만든 관리형 Kubernetes Service.

EKS 를 사용하면 Kuberenetes 설치부터 운영까지 EKS가 해주기 때문에

직접 Kubernetes Cluster 를 구성하고 관리하는 것보다 쉽게 Kubernetes 를 사용할 수 있음.

 

Amazon EKS는 오픈소스 kubernetes 의 최신버전을 실행하므로 

kubernetes 의 모든 plugin과 tool을 사용할 수 있음.

 

[Kubernetes Master Node]

AWS EKS가 직접 관리.

EKS에서 Master Node를 Control Plane 이라 부름

 

[Kubernetes Worker Node]

AWS EKS Node Groups가 관리.

EKS에서 Worker Node를 Data Plane 이라 부름

 

 

 

이해에 필요한 참고 그림

 

(AWS 세미나에서 가져옴.)

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

EC2에 직접 K8s를 설치하는 것과 EKS 차이점.

 

[질문]

EC2에 쿠버네티스를 설치해서 사용하는 것이랑 

EKS를 사용하는 것의 주요 차이점, 장단점 등은 어떤 것들이 있을까요?

 

[답변]

EC2에서 쿠버네티스를 설치해서 사용하실 경우 

쿠버네티스의 마스터 노드에 위치한 

각종 컴포넌트(api server, etcd etc.) 등에 대한 고가용성도 고객이 직접 보장/관리 하셔야 합니다. 

하지만. eks를 사용하시는 경우 싱글태넌트로 고객별로 만들어진

 kubernetes master node를 저희가 직접 고가용성 관리를 하므로 관리 운영 부담이 현저히 줄어듭니다.

항목

K8S

EKS

구동 환경

on-premises

AWS

master node

직접 설치 및 관리 필요 

AWS에서 관리 해줌

master node HA

직접 구성 필요 

자동으로 구성

인증

직접 구성 필요 

AWS IAM 기반 인증 사용

Pod 네트워크 통신 방식

다양한 plugin 지원 

EKS는 기본적으로 amazon-vpc-cni-k8s 을 지원

amazon-vpc-cni-k8s 플러그인은 VPC 상에서 유효한 실제 IP를 Pod에 할당합니다.

Pod 제한

없음

c5.large에서는 29개의 Pod만 사용 가능

  • 제한이 발생 하는 이유 
    • instance 타입에 따라 추가할 수 있는 ENI 수와 ENI 당 IP 수에 제한이 있기 때문에 발생

 

 


 

 

 

 

EKS를 관리할 수 있는 Tool

 

AWS Management Console

Website AWS 홈페이지에서 

GUI 로 AWS 를 컨트롤

 

AWS CLI

AWS Command Line Interface (AWS CLI)

즉 cli 명령어로 AWS 를 컨트롤 하는 tool

download link  : https://awscli.amazonaws.com/AWSCLIV2.msi

 

eksctl

cli 명령어로 가장 간단하고 쉽게 클러스터 생성 가능

windows 용 download link : https://github.com/weaveworks/eksctl/releases/download/0.21.0/eksctl_Windows_amd64.zip

 

[windows에서 설치 명령어]

chocolatey install -y eksctl

 

참고)

eksctl 을 사용하기 위해서는 AWS CLI가 설치 되어 있고

자격증명구성이 되어있어야함

 

 

AWS SDK

개발 api 를 사용해서 컨트롤 가능

 

 

Terraform

IAC ( Infrastructure As Code )

인프라를 코드로 관리 가능

Terraform : 인프라를 만들고 바꾸고 버전 관리하는 도구.

AWS, GCP, Azure 등에서도 지원

 

 

Firecracker

마이크로 VM

 

[질문]

람다가 있는데 Firecracker가 만들어진 이유는 무엇인가요? 

굳이 불편한 가상화 환경에서 구현하는 이유는 무엇인가요?

 

[답변]

람다도 결국 어떠한 호스트 환경에서 (underhood)구동된다는 사실에서 보면 

Firecracker와 lamabda를 직접 비교하기는 어려울것 같습니다.

Firecracker의 태생 목적을 보면 이 효용 가치를 이해 하실수 있을것 같습니다.

"Firecracker is an open source virtualization technology that is purpose-built 

for creating and managing secure, multi-tenant container and function-based 

services that provide serverless operational models. "

 

 

 


 

 

 

EKS Cluster 생성

 

 

1. Cloud9 생성

 

Cloud9이란? 

브라우저만으로 코드를 작성, 실행 및 디버깅할 수 있는 클라우드 기반 통합 개발 환경(IDE)

cloud9 링크 : https://ap-northeast-2.console.aws.amazon.com/cloud9/home/product

 

[주의] 

Cloud9 워크스페이스는 루트 계정 사용자가 아닌 관리자 권한을 가진 IAM 사용자가 생성할 수 있음.

루트 계정 사용자가 아닌 IAM 사용자로 로그인했는지 확인해야함.

 

 

Create environment 클릭

 

 

 

 

생성할 cloud9 Name 입력 

 

 

 

 

 

스펙 설정.

예시에서는 default로 생성함.

 

 

 

 

생성되는 스펙 확인 후 Create environment 로 생성

 

 

 

 

 

 

조금 시간이 흐른 뒤 생성완료 됨.

 

아래 이미지와 같이 창을 닫고 터미널남 새로 open함

터미널 open 단축키 : Alt+T

 

 

 

Cloud9 사용준비 완료.

 

 


 

 

2. IAM Role생성 후 Cloud9에 할당

 

Workspace에서 eks를 사용하기 위해서는 권한 설정이 필요함.

AdministratorAccess 권한을 가진  IAM Role (cloud9-admin)을 생성 후 workspace에 할당함.

 

[주의]

AdministratorAccess 이 아닐경우 권한문제 때문에 테스트가 어려워 짐..

 

 

IAM 역할 생성

 

IAM에 접속 후 역할만들기

 

 

 

 

 

EC2 선택

 

 

 

 

AdministratorAccess 정책을 추가함.

 

 

 

역할 이름을 넣어줌.

 

 

 

 

 

 

Cloud9 인스턴스에 상위에서 생성한 IAM 적용.

EC2 대시보드로 가서 

인스턴스를 클릭하면 생성했던 Cloud9 인스턴스 확인가능

인스턴스 선택 후 IAM 역할 수정

 

 

 

상위에서 생성한 IAM 넣어줌

 

Cloud9 IDE로 돌아와서 Preferences 클릭

 

임시 자격증명 기능 끄기

[기존 자격증명이 존재시 파일 제거하는 명령어]

rm -vf ${HOME}/.aws/credentials

 

 

 

 


 

 

3. EKS에 필요한 Tool 설치

 

eksctl 설치

[명령어]

curl --silent --location "https://github.com/weaveworks/eksctl/releases/download/latest_release/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp

 

[명령어]

sudo mv -v /tmp/eksctl /usr/local/bin

 

 

[eksctl 자동 완성 기능 ]

eksctl completion bash >> ~/.bash_completion

. /etc/profile.d/bash_completion.sh

. ~/.bash_completion

 

 

JQ 설치

[명령어]

sudo yum -y install jq

 

 

 

kubectl 설치

[명령어]

curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"

 

[명령어]

chmod +x ./kubectl

 

[명령어]

sudo mv ./kubectl /usr/local/bin/kubectl

 

[설치 확인]

kubectl version --client

 

 

 

 

AWS IAM Authenticator 설치

 

aws-iam-authenticator은 AWS IAM 정보를 활용하여 쿠버네티스 클러스터 사용자 인

 

[명령어]

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

 

[명령어]

brew install aws-iam-authenticator

 

[설치확인]

aws-iam-authenticator help

 


 

 

4. 현재 Region 을 기준으로 aws-cli 구성

 

[명령어]

export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account)

export AWS_REGION=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region')

 

[확인]

echo $ACCOUNT_ID

echo $AWS_REGION

 

 

[생성된 region 확인 명령어]

test -n "$AWS_REGION" && echo AWS_REGION is "$AWS_REGION" || echo AWS_REGION is not set

 

 

[ACCOUNT_ID 정보화 AWS_REGION정보를 bashrc에 기록 명령어]

echo "export ACCOUNT_ID=${ACCOUNT_ID}" | tee -a ~/.bash_profile

echo "export AWS_REGION=${AWS_REGION}" | tee -a ~/.bash_profile

aws configure set default.region ${AWS_REGION}

aws configure get default.region

 

[GetCallerIdentity CLI 명령어]

aws sts get-caller-identity --query Arn | grep cloud9-admin -q && echo "IAM role valid" || echo "IAM role NOT valid"

 

Cloud9 IDE가 올바른 IAM 역할을 사용하는지 확인.

grep 부분에서 명칭을 확인후 명령어 실행을 해야 함.

 

 

 


 

5. SSH Key 생성하고 EC2 region에 업로드

 

SSH Key 생성

 

[명령어]

ssh-keygen

 

enter키를 세번 눌러서 기본 옵션으로 생성함.

- id_rsa =  private key, 절대 타인에게 노출되면 안됨

- id_rsa.pub =  public key, 접속하려는 리모트 머신의 authorized_keys에 입력.

- authorized_keys = 리모트 머신의 .ssh 디렉토리 아래에 위치하면서 id_rsa.pub 키의 값을 저장.

 

 

 

[명령어]

aws ec2 import-key-pair --key-name "iksoon-cloud9" --public-key-material file://~/.ssh/id_rsa.pub

생성한 후 EC2 의 네트워크 및 보안 > 키페어로 가보면 생성한 키 페어 확인가능

 

 


 

6. EKS Cluster 생성 보안을 위한 ssh-key 등록

 

 

KMS(Key Management Service)를 이용한 CMK(Customer managed key) 생성

 

[명령어]

aws kms create-alias --alias-name alias/iksoon-eksworkshop --target-key-id $(aws kms create-key --query KeyMetadata.Arn --output text)

 

[명령어]

export MASTER_ARN=$(aws kms describe-key --key-id alias/iksoon-eksworkshop --query KeyMetadata.Arn --output text)

 

[확인]

echo "export MASTER_ARN=${MASTER_ARN}" | tee -a ~/.bash_profile

 

 


 

 

7. EKS Cluster 생성

 

[예제 eks_cluster.yaml 파일]

apiVersion: eksctl.io/v1alpha5

kind: ClusterConfig

metadata:

  name: iksoon-eks-cluster # 생성할 EKS 클러스터명

  region: ap-northeast-2   # 클러스터를 생성할 리젼

  version: "1.18"          # kubernetes version

managedNodeGroups:

  - name: iksoon-eks-cluster-ng # 클러스터의 노드 그룹명

    desiredCapacity: 3          # 클러스터 워커 노드의 갯수

    volumeSize: 10              # 클러스터 워커 노드의 EBS 용량 (단위: GiB)

    iam:

      withAddonPolicies:

        ImageBuilder: true      # AWS ECR에 대한 권한 추가

        albIngress: true        # alb ingress에 대한 권한 추가

    ssh:

      allow: true               # 워커 노드에 SSH 접속 허용

      publicKeyName: iksoon-cloud9  # 워커 노드에 SSH 접속을 위해 사용할 pem키 명(aws key pairs에 >등록되어 있어야함)

secretsEncryption:

  keyARN: ${MASTER_ARN}

만약 ssh: publicKeyName 설정이 없다면

EKS는 기본적으로 worker node에 ssh 설정을 안하기 때문에

worker node로 접근이 불가능해짐.

 

 

[명령어]

eksctl create cluster -f eks_cluster.yaml

 

 

 

[EKS 생성 완료 상태 로그]

 

 

 

 


 

 

8. EKS Cluster Worker Node에 접속

 

상위의 eks_cluster.yaml 에서 

 ssh: publicKeyName 설정을 해서 ssh 로 

Worker Node에 접속 가능

 

 

[명령어]

ssh -i "~~~"

 

 

 

 


 

 

참고

 

EKS Cluster 생성 참고

https://medium.com/finda-tech/aws-eks-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EA%B5%AC%EC%B6%95-48a2dc08cae8

 https://awskrug.github.io/eks-workshop/prerequisites/

 

EKS ClusterConfig 참고

https://eksctl.io/usage/creating-and-managing-clusters/

 

서비스 중단 없이 EKS로 이동

http://engineering.vcnc.co.kr/2019/02/eks-migration/

 

Amazon EKS 워크샵

https://awskrug.github.io/eks-workshop/

 

youtube 강의

https://www.youtube.com/watch?v=O3znWPUdt18&t=1069s

 

eks 참고 pdf

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/eks-ug.pdf

 

WorkerNode접속 참고

https://twofootdog.tistory.com/79

https://kycfeel.github.io/posts/2/

 

 

 

 

 

 

 

 

 

 

반응형

'클라우드 > AWS' 카테고리의 다른 글

EKS Network Policy 분석  (0) 2021.05.06
EKS AWS CNI - Pod 간 통신  (0) 2021.05.06
EKS AWS CNI 분석  (2) 2021.05.03
AWS API 사용 (Python)  (0) 2020.08.12
AWS 1년 무료 서버 생성법  (0) 2020.08.12