0부터 시작하는 AWS 공부 - EKS 구축하기 - 기본 환경 구축

Jaehong Lee·2023년 4월 7일
3
post-thumbnail

1. 구축 계획

구축 아키텍쳐

  • 위 아키텍쳐를 구축하자
  • 2 개의 가용 영역을 사용하며, Subnet은 각 가용 영역별로 Public 하나, Private 하나로 구성된다
  • IGW와 NAT GW가 존재하며, 라우팅 테이블도 구축해야 한다

Cluster & Node 요구 사항

  • 위 요구 사항에 따라 구축해야 한다

먼저, 기본적인 네트워크와 클러스터 작업용 Bastion Host를 구축하자


2. 네트워크 구축

VPC & Subnet

  • VPC를 생성하자

  • SUBNET을 생성하자
  • 가용영역은 A,C를 사용한다. B와 D는 최신 AZ이다. 최신 가용영역은 사용 불가한 서비스나 기능이 있을 수 있기에 A와 C를 사용한다

  • 위 정보에 맞게 SUBNET을 생성하자
  • EKS에서 POD들은 실제 VPC의 네트워크 대역을 사용한다. 추후에 클러스터의 규모가 커질 것을 대비하여 서브넷의 IP 대역을 넉넉하게 주었다

Internet GateWay

  • Internet GateWay를 생성하자

  • VPC에 연결해주자

  • IGW용 라우팅 테이블을 생성하자. IGW를 NAT / BASTION SUBNET과 연결해야 한다

  • 내부 라우팅용 규칙과 외부로 나가는 모든 주소에 대해 IGW에 향하도록 하는 규칙을 생성하자

  • 라우팅 테이블에 NAT / BASTION SUBNET을 연결하자

NAT GATEWAY

  • NAT GW를 생성하자. 탄력적 IP 역시 할당해주자

  • NAT 용 라우팅 테이블을 만들자. EKS 클러스터가 위치할 SUBNET을 NAT GW와 연결해야 한다

  • 내부 라우팅용 규칙과 외부로 나가는 모든 주소에 대해 NAT GW에 향하도록 하는 규칙을 생성하자

  • 라우팅 테이블에 PRIVAT SUBNET을 연결하자

Default 라우팅 테이블 삭제

필요한 라우팅 테이블을 모두 생성했으므로, VPC 생성 시 기본적으로 생성되는 라우팅 테이블을 삭제하자

기본 라우팅 테이블은 삭제가 불가능하다. 따라서 다른 라우팅 테이블을 기본으로 설정해야 한다

  • 해당 VPC 내에서 라우팅 테이블이 설정되지 않은 SUBNET은 자동으로 기본 라우팅 테이블에 연결된다

  • NAT GW 라우팅 테이블을 기본 라우팅 테이블로 설정하자

  • 기본으로 생성된 라우팅 테이블을 삭제하자

네트워크 완성

  • 최종적으로 위와 같은 구성이 되야 한다

3. Bastion Host

보안 그룹 & Key Pair

Bastion Host 생성 전에 필요한 것들을 생성하자

  • 먼저, Key Pair를 생성하자. Putty를 이용해 접속할 것이므로 ppk로 생성하자
  • 생성 시 다운로드 받은 ppk Key는 잘 보관하자

보안 그룹을 생성하자

  • 보안 그룹을 생성하자. VPC를 지정해주자

  • 인바운드 규칙으로는 자신의 서버에서 SSH 접속이 가능하도록 규칙을 생성하자
  • 아웃바운드의 경우, Control Plane의 Kubernetes Api Server에만 접근이 가능하도록 설정해야 하지만, 아직 EKS를 생성하지 않았으므로 넘어가자

인스턴스 생성

  • 이름을 지정하자

  • 이미지로는 Amazon Linux 2023 AMI를 사용하자

  • Flavor는 t3.micro를 선택하고, Key Pair는 위에서 생성한 Key Pair를 선택하자

  • 네트워크 역시 기존에 생성한 리소스를 선택하고, 인터넷을 통해 접근해야 하므로 퍼블릭 IP도 할당해주자

인스턴스를 생성해주자


인스턴스 접속

인스턴스의 퍼블릭 IP를 확인하자

  • Putty에서 아까 다운로드 받은 ppk 키를 선택하자

  • 파란색 부분에 Bastion Host의 퍼블릭 IP를 입력하고, 접속하자

  • 잘 접속이 되었다

AWS Cli 설치

참조 : https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
  • AWS CLI를 설치하자
  • 패키지를 다운로드 받아 압축 해제하고, 설치를 실행하자
[ec2-user@ip-192-168-11-50 ~]$ /usr/local/bin/aws --version
aws-cli/2.11.10 Python/3.11.2 Linux/6.1.21-1.45.amzn2023.x86_64 exe/x86_64.amzn.2023 prompt/off
  • 잘 설치되었는지 버전을 확인하자

AWS Cli는 콘솔 접근이 불가능한 Cli 계정을 따로 만들어서 사용할 것이다


Kubectl 설치

참조 : https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-linux/

우리는 Bastion Host에서 Control Plane의 Kubernetes Api Server에 명령을 보낼 것이다. 그러기 위해선 Kubectl이 필요하다

curl -LO https://dl.k8s.io/release/v1.25.0/bin/linux/amd64/kubectl
  • 1.25.0 버전 바이너리를 다운 받자
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
  • Kubectl을 설치하자
[ec2-user@ip-192-168-11-50 ~]$ kubectl version --short
Flag --short has been deprecated, and will be removed in the future. The --short output will become the default.
Client Version: v1.25.0
Kustomize Version: v4.5.7
The connection to the server localhost:8080 was refused - did you specify the right host or port?
  • 잘 설치되었는지 버전을 확인하자
  • 마지막에 8080 was refused는 Kubectl 관련 Config가 설정되지 않았기 때문이다. 즉, Config 파일에 현재 유저의 정보가 없거나, Config 파일이 $HOME/.kube 디렉토리 안에 없을 때 발생하는 에러다
  • 아직 EKS 생성하기 전이므로 당연히 발생하는 에러다. 넘어가도 된다

Eksctl 설치

Eksctl이란 EKS에서 Kuberentes 클러스터를 생성하고, 관리하기 위한 Cli 도구이다

curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
```> - eksctl 릴리스를 다운 받고, 압축 해제하자

```shell
sudo mv /tmp/eksctl /usr/local/bin
  • 압축 해제한 바이너리 파일을 /usr/local/bin에 옮기자
[ec2-user@ip-192-168-11-50 ~]$ eksctl version
0.136.0
  • 잘 설치되었는지 버전을 확인하자

EKS 구축 및 IAM 설정은 다음 편에서 이어진다

profile
멋진 엔지니어가 될 때까지

0개의 댓글