본문 바로가기

⌛ AWS 인프라 구성하기 (MiniProject)/✅ 개발환경 구성 (EKS)

2.EKS 기본 아키텍처 구성하기 (EKS 인프라 구성)

728x90
반응형

# EKS 기본 아키텍처를 기반으로 인프라 구축하기

2022.05.11 - [AWS 인프라 구성하기 (MiniProject)/개발환경 구성 (EKS)] - EKS 기본 아키텍처 구성하기.1 (WorkFlow)

 

EKS 기본 아키텍처 구성하기.1 (WorkFlow)

# EKS 기본 구성도 기본 아키텍처는 EC2의 기본 아키텍처과 매우 비슷하다. 단지 Private Subnet에 어떤 자원이 존재하는가에 따른 차이만 다르다. EC2 기본 아키텍처에는 EC2 인스턴스가 존재 하였지만

may9noy.tistory.com

1. Network 리소스를 설치 (VPC, Subnet, 등등)

CloudFormation을 통한 네트워크 리소스를 설치한다.

내용은 AWS에서 기본으로 제공하는 자료이고 아래와 같다.

아래의 내용을 amazon-eks-vpc-private-subnets.yaml 파일로 저장하고 CloudFormation에 붙여넣으면 정보를 생성한다.

2. EKS 인프라 생성하기

아래에 링크로 이동하여 EKS 기본 인프라를 생성한다. EC2 인프라 생성과 다른점은 서브넷 태그값에 kubernetes.io/role/internal-elb 값을 추가해 줘야 한다는 차이점이 있다.

2022.05.02 - [AWS/AWS Network] - AWS 기본 네트워크 구성

 

AWS 기본 네트워크 구성

# AWS의 기본 네트워크인 VPC, PublicSubnet, PrivateSubnet, 인터넷 게이트웨이, 라우팅 테이블등을 생성하고, public망과 private망을 나누어 네트워크를 구성한다. 1. VPC를 생성한다. → 192.168.0.0/16 infra..

may9noy.tistory.com

기본 네트워크 구성 후 생성한 네트워크에 서브넷으로 이동하여 아래와 같이 설정을 진행한다.

퍼블릭 서브넷 및 프라이빗 서브넷 모두 아래와 같이 태그값을 넣어줘야 한다.

퍼블릭 서브넷 (kubernetes.io/role/elb : 1)

프라이빗 서브넷 (kubernetes.io/role/internal-elb : 1)

3. EKS ClusterNode와 WorkerNode의 IAM 역할 생성

클러스터 IAM 역할 생성

[AWS Management Console]을 실행, [IAM] → [역할] → [역할 만들기]를 선택한 후 [사용 사례 선택]에서

[EKS] → [EKS - Cluster]를 선택한 후 [다음: 권한]을 클릭한다.

Worker Node IAM 역할 생성

[AWS Management Console]을 실행하고 [IAM] → [역할] → [역할 만들기]를 선택한 후 [사용 사례 선택]에서

[EC2]를 선택한 후 [다음: 권한]을 클릭한다.
[권한]에서는 AmazonEKSWorkerNodePolicy, AmazonEKS_CNI_Policy, AmazonEC2ContainerRegistryReadOnly 를 선택한 후 IAM을 생성한다.

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

eksctl version 확인

eksctl version

4. EKS 클러스터 생성 및 Kubeconfig 파일 생성

클러스터는 아래와 같이 명령어를 통해서 간단하게 생성이 가능하다.

BastionHost에서 아래의 코드를 실행하면 클러스터가 생성 된다.

파일명은 create-cluster.yaml 로 한다. Cluster는 private 환경에 위치해야 하므로 private 서브넷을 넣어준다.

eksctl을 통한 클러스터 생성

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: "EKS-SEUNG-SEUNG-CLUSTER"
  region: ap-northeast-2
  version: "1.21"

vpc:
  subnets:
    private:
      ap-northeast-2a: { id: "subnet-111111111115f571d" }
      ap-northeast-2c: { id: "subnet-11111111111cecdd2" }

실행전에 AWS CLI에 자격 증명은 되어 있어야 한다.

생성한 파일을 실행하는 명령어는 아래와 같다.

eksctl create cluster -f create-cluster.yaml

정상적으로 설치가 되었다면 아래와 같은 메세제가 출력된다.

- eksctl을 사용하여 Node-Group 생성

eksctl create nodegroup \
  --region ap-northeast-2 \
  --cluster {cluster_name} \
  --node-private-networking \ # Private network 사용
  --name test-nodes \ # node-name
  --node-type t3.medium \ # node-type
  --nodes 3 \
  --nodes-min 1 \
  --nodes-max 4

- 아래는 콘솔 화면에서 생성하는 방법이다.

AWS EKS 서비스로 이동하여 클러스터를 생성한다. 

다음 네트워크  설정을 진행 한다. 
VPC : 사전작업 시 생성했던 VPC를 선택한다.
서브넷 : 사전작업 시 생성했던 서브넷을 입력하는데, 이 글에서는 퍼블릭 서브넷 2개, 프라이빗 서브넷 2개를 생성했었으며, 프라이빗 서브넷을 쿠버네티스 작업자 노드용 서브넷으로 사용할 것이기 때문에 프라이빗 서브넷 2개를 선택한다. 
보안 그룹 : 사전작업 시 생성했던 Security Group을 선택한다.
클러스터 엔드포인트 엑세스 : [프라이빗]을 선택하게 되면 로컬에서 kubectl을 통해 쿠버네티스 클러스터에 접근할 수 없고, 동일 VPC내에 있는 EC2에서만 접근 가능하다.

(퍼블릭 및 프라이빗으로 설정하면 로컬 환경 등에서도 접근 이 가능하다.)

생성된 클러스터 확인하기

클러스터가 정상적으로 생성되어 아래와 같이 버전과 활성 정보를 나타내고 있다.

5. BastionHost 환경을 구성하여 생성된 클러스터에 접근하기

동일한 VPC 환경에 EC2 인스턴스를 생성한다.

2021.10.24 - [AWS/EC2] - EC2 생성

 

EC2 생성

EC2 인스턴스 생성 1. 인스턴스 시작을 클릭하여 EC2 생성을 시작합니다. 2. 설치할 OS를 확인하고 선택을 클릭합니다. 3. 원하는 스펙을 선택하고 다음으로 넘어 갑니다. 4. 네트워크를 구성 후 다음

may9noy.tistory.com

EC2 생성 후 BastionHost SSH 접속

2020.11.01 - [AWS/EC2] - MobaXterm을 활용한 SSH 접속

 

MobaXterm을 활용한 SSH 접속

1. MobaXterm 다운로드 웹페이지 접속 후 다운로드 : https://mobaxterm.mobatek.net/ MobaXterm free Xserver and tabbed SSH client for Windows The ultimate toolbox for remote computing - includes X serve..

may9noy.tistory.com

EC2 OS 라이브러리 업데이트

sudo apt update

sudo apt upgrade

AWS Cli 다운로드

sudo apt install awscli

AWS 서비스를 사용하기 위한 자격증명 구성하기

2021.12.21 - [AWS/AWS CLI] - AWS CLI 자격증명 구성

 

AWS CLI 자격증명 구성

1.AWS Configure 구성 - 해당 경로로 이동하여 자격증명을 생성합니다. 자격증명은 해당 계정으로 로그인하는 아이디와 패스워드라고 이해하면 쉽습니다. - AWS 내 보안 자격증명 에서 엑세스 키와 시

may9noy.tistory.com

6. Kubectl 설치 및 EKS 클러스터 연결

Kubectl 설치

# kubectl 다운로드
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.23.6/bin/linux/amd64/kubectl

# 다운받은 kubectl 권한설정 
chmod +x ./kubectl

# 다운받은 kubectl 폴더를 특정 경로로 이동
sudo mv ./kubectl /usr/local/bin/kubectl

EKS 클러스터 연결하기

$ aws eks --region [리전명] update-kubeconfig --name [EKS 이름]
예 : aws eks --region ap-northeast-2 update-kubeconfig --name eks-test-01

그리고 BationHost에 eksctl과 kubectl이 설치가 되어 있으면 위의 EKS 클러스터 연결하기에서 클러스터 이름만 바꿔서 시실행 후 EKS 명령어를 실행해 주면 된다.

만약, Unauthorized 오류가 발생하면 보안자격증명을 해줘야 한다.

export AWS_ACCESS_KEY_ID=" "
export AWS_SECRET_ACCESS_KEY=" "

현재의 클러스터 연결 확인하기

참고로 cmd에서 F7은 명령어 히스토리를 확인 할 수 있다.

kubectl config current-context
arn:aws:eks:ap-northeast-2:11111111111:cluster/aws-test-01

정상적으로 연결 되었는지 확인하기

ubuntu@ip-192-168-0-228:~$ kubectl get pod --all-namespaces
NAMESPACE     NAME                       READY   STATUS    RESTARTS   AGE
kube-system   coredns-556f6dffc4-dbr2b   0/1     Pending   0          108m
kube-system   coredns-556f6dffc4-krdl8   0/1     Pending   0          108m

7. WorkerNode Group 생성하기

[Amazon EKS] → [클러스터] → [컴퓨팅] → [노드 그룹 추가]를 선택한다.

노드 그룹 구성 정보를 입력한다. 노드 IAM 역할은 WorkerNode 역할을 지정해 준다.

컴퓨팅 및 조정 구성 설정을 한다. 원하는 리소스 자원에 맞게 설정을 진행 한다.

네트워크를 구성한다.

클러스터 서브넷을 프라이빗으로 했으므로 워커노드 그룹도 프라이빗 서브넷으로 진행 한다.

마지막으로 검토 후 생성을 클릭하여 노드그룹을 생성한다.

노드 그룹의 생성시간은 약 10~20분정도 소요되고 생성정보는 아래와 같다.

 

- 끝 -

728x90
반응형