본문으로 바로가기

[AWS] EKS 생성 환경 구축 (eksctl 활용)

category AWS 2023. 2. 26. 20:02
반응형

Intro


이번 시간엔 AWS EKS 환경 구축 및 생성 방법에 대해 알아보겠다.

 

인터넷 통신을 위하여 Internet Gateway 와 NAT Gateway 를 사용하였다.

 

 

 

VPC 구성


  • VPC 1개
  • Subnet 4개
  • Routing Table 4개
  • Internet Gateway 1개
  • NAT Gateway 2개
  • Bastion 서버용 Security Group 1개

 

구성 내용은 아래와 같다.

 

VPC 생성

 

Subnet 생성

Routing Table 생성

4개의 라우팅 테이블 생성하였으며 4개의 서브넷과 각각 1:1 매핑하였다.

 

 

Private Subnet RoungTable

프라이빗 서브넷의 라우팅 테이블에는 destination이 0.0.0.0/0 이면 NAT (AZ1) Gateway로 가라는 Rule Set을 적용했다.

 

 

Public Subnet RoungTable

퍼블릿 서브넷의 라우팅 테이블에는 destination이 0.0.0.0/0 이면 Internet Gateway로 가라는 Rule Set을 적용했다.

 

 

Bastion 용 Security Group 생성

Bastion-SG

유형 Protocol Port Source Destination
Inbound TCP 22 My Home IP  
Outbound 전체 전체   0.0.0.0

 

IAM 및 Security Group 구성


Cluster에서 사용할 Role 생성 및 Policy 적용

  • Role Name : EKSCluster_Role
  • 신뢰관계 :eks.amazonaws.com
  • Policy : AmazonEKSClusterPolicy

 

NodeGroup에서 사용할 Role 생성 및 Policy 적용

  • Role Name : EKSNodeGroup_Role
  • 신뢰관계 :ec2.amazonaws.com
  • Policy : 
    • AmazonEKS_CNI_Policy
    • AmazonEC2ContainerRegistryReadOnly
    • AmazonEKSWorkerNodePolicy

 

Bastion에서 사용할 Role 생성 및 Policy 적용

  • Role Name : MGMT_Role
  • 신뢰관계 : ec2.amazonaws.com
  • Policy : Administrator (편의를 위해 Admin 권한을 주었음)

※ Cluster와 NodeGroup의 권한은 필요에 따라 추가해줘야 함

 

 

보안그룹 구성 여기 참조

 

Bastion 서버 생성


Image : Amazon Linux 2

Type : t3.small

Security Group : Bastion-SG

EIP 할당

Vol : 8GB, gp3

role 할당 (Administrator)

 

 

EKS 생성을 위한 Bastion 서버 구성


■ 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

 

■ eksctl 설치

https://docs.aws.amazon.com/ko_kr/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
export PATH=$PATH:/usr/local/bin
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc
eksctl version

 

■ kubectl 설치 (v 1.23)

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html

 

curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.23.15/2023-01-11/bin/linux/amd64/kubectl.sha256
openssl sha1 -sha256 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

 

 

EKS 생성


yaml 파일 생성

mkdir /EKS/eksctl-yaml
cd /EKS/eksctl-yaml
vi eks_install.yaml

 

yaml 파일 작성

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: EKS-Cluster-01
  region: ap-northeast-2
  version: "1.23"

iam:
  serviceRoleARN: arn:aws:iam::34XXXXXXXXXX:role/EKS-Cluster-Role

vpc:
  subnets:
    private:
      ap-northeast-2a: { id: subnet-0fbc2865591c13eef }
      ap-northeast-2c: { id: subnet-0c61085279b3d16d0 }
  securityGroup: sg-04808874a29700303
  clusterEndpoints:
    privateAccess: true
    publicAccess: true

cloudWatch:
  clusterLogging:
    enableTypes: [ "api", "audit", "authenticator", "controllerManager", "scheduler" ]

managedNodeGroups:
  - name: EKS-NodeGroup
    instanceType: t3.small
    minSize: 1
    maxSize: 2
    desiredCapacity: 2
    volumeSize: 10
    volumeType: gp3
    volumeKmsKeyID: arn:aws:kms:ap-northeast-2:34xxxxxxxxxx:key/XXXXX
    volumeEncrypted: true
    privateNetworking: true
    securityGroups:
      attachIDs:
        - sg-015993dc24f3180eb
    tags:
      nodegroup-role: worker
    iam:
      instanceRoleARN: arn:aws:iam::34XXXXXXXXXX:role/EKS-NodeGroup-Role
    ssh:
      allow: true
      publicKeyName: test

 

EKS 생성

eksctl create cluster -f eks_install.yaml

 

 

 

 

EKS 클러스터 및 워커 노드가 생성된 것을 볼 수 있다.

 

 

정리


이번 시간엔 프라이빗 환경이 아닌 인터넷 통신이 되는 환경에서의 EKS 생성 방법에 대해 알아보았다.

Internet Gateway (수평적 확장 됨)

 

Nat Gateway 2개 (EIP 할당)

 

VPC 1개, 서브넷 4개, 라우팅 테이블 4개

 

IAM 구성

 - EKS Cluster Role

 - EKS NodeGroup Role

 - Bastion Role

 

Security Group 구성

 - EKS Cluster SG

 - Worker Node SG

 - Bastion SG

 

Bastion 서버 1대

 - aws cli 설치

 - eksctl 설치

 - kubectl 설치

 - eksctl yaml 생성

 

EKS 설치

 

마치며


이번 시간엔 프라이빗 환경이 아닌 인터넷 통신이 되는 환경에서의 EKS 생성 방법에 대해 알아보았다.

확실히 프라이빗 환경에서 설치하는 것 보다 퍼블릭 환경에서 설치하는 것이 더 간편히 설치할 수 있는 것 같다.

다음 시간엔 EKS 환경에서 ArgroCD 와 GitLab 을 활용한 EKS 백업/복구 시나리오에 대해 알아보도록 하겠다.

 

 

 

 

반응형