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 백업/복구 시나리오에 대해 알아보도록 하겠다.
'AWS' 카테고리의 다른 글
AWS EC2에 terraform 설치하기 (0) | 2023.03.19 |
---|---|
[AWS] 프라이빗 환경에서 eksctl로 AWS EKS 생성하기 (0) | 2023.02.19 |
두 개의 EC2 인스턴스 간의 SSH 설정을 통해 Ansible로 통신 확인하기 (0) | 2021.04.04 |
[AWS 실습] VPN을 이용한 하이브리드 클라우드 구축하기 part 1 (0) | 2021.02.26 |
[AWS] 자격증 준비 및 합격 후기 (1) | 2021.02.07 |