Cloud Infra Architecture (AWS)/AWS Build

AWS EKS 생성 후 접속하기 (Node 그룹, Pod 생성하기, Pod 접속하기)

seongduck 2024. 10. 20. 22:46

AWS EKS 클러스터를 생성하고 해당 EKS에 접속하기 위해서는 2가지 방법이 있다.

  1. EC2 접속
  2. AWS CLI 접속

 

필자는 EC2로 쉽게 실습해서 접속하는 방법을 소개합니다.

이후 EKS를 생성하고 접속은 물론, Node 그룹을 만들며, Pod까지 생성 후 Pod에 접속까지 해보겠습니다.


1) EKS 클러스터 환경 접속을 위한 전용 EC2(Bastion Server) 생성

1-1) EC2 생성

1) EC2를 생성할 Subnet 선택 -> 작업 -> 서브넷 설정 편집 -> 자동할당 IP 설정 체크(활성화)
2) EC2 생성 - AWS Linux 2023 OS 선택 - 생성

 

1-2) EC2에서 EKS를 사용하기 위한 IAM 역할 생성

1) IAM 역할 생성 - AdministratorAccess 정책 추가 후 생성 #실제론 필요한 EKS 권한만 넣을 것

 

1-3) 서버에 접속해서 필요한 라이브러리 설치 (aws cli, docker, kubectl, helm, eksctl)

# aws cli2 설치
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install

# docker 설치
sudo su
yum install -y docker
systemctl start docker
systemctl enable docker
usermod -a -G docker ec2-user

# Kubectl 1.27버전 다운로드
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.27.1/2023-04-19/bin/linux/amd64/kubectl
chmod +x ./kubectl
HOME=/home/ec2-user
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc

# kubectl 자동완성 설정
kubectl completion bash | tee /etc/bash_completion.d/kubectl > /dev/null

# helm 설치
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

# eksctl 설치
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
mv /tmp/eksctl /usr/local/bin

 

1-4) EC2에 직전에 생성한 IAM 역할 넣어주기

1) EC2 선택 - 작업 - 보안 - IAM 역할 수정 - 방금생성한거 선택 - IAM 역할 업데이트

세팅은 여기까지 해주고 AWS EKS 생성


2) EKS 클러스터 생성

2-1) EKS 클러스터 IAM 생성

1) IAM 역할 생성 - AWS서비스 - 사용사례:EKS - Cluster - 생성

 

2-2) EKS 클러스터 sg 생성

1) 보안그룹 생성
2) Port:443 - Source:BastionEC2 보안그룹
3) 생성

 

2-3) EKS 클러스터 생성

1) AWS EKS - 클러스터추가 - 이름입력 - 버전은 1.27 - 클러스터 관리자 액세스 허용
2) 추후 노드와 같은 VPC 및 서브넷 선택 - 퍼블릭 및 프라이빗 엔드포인트 액세스
3) 제어 플레인 로깅 모두 켜기
4) GuardDuty EKS 런타임 모니터링 빼고 다 체크
5) 생성

약 5~15분정도 이후 생성 완료


3) EC2 (Bastion)에서 AWS EKS 접속하기 (등록하기)

3-1) EC2에 EKS Cluster User Key 설정하기

1) 계정선택 - 보안자격증명 - 액세스 키 - 액세스 키 만들기
2) Bastion EC2 접속하기

$ aws configure
"""
Access Key 입력
Secret Key 입력
ap-northeast-2
json
"""

 

3-2) EC2에서 생성한 EKS 접속하기

$ aws eks update-kubeconfig --name "AWS EKS에서 생성한 이름" #""제거 후 입력

 

3-3) Cluster 접속 테스트

$ kubectl get svc

4) Node Group 생성하기

1) AWS EKS 콘솔에서 해당 클러스터 선택
2) 컴퓨팅 - 노드 그룹 추가 - IAM 정책 선택
2-1) IAM 정책은 AmazonEKSWorkerNodePolicy가 포함된것 #필자는 AdministratorAccess 룰 적용
3) AMI 선택 - 인스턴스 유형 선택 - 디스크 선택 - 원하는 노드 선택
4) EKS와 동일한 서브넷 2개 선택 - 생성

2~10분 이내에 생성 완료

4-1) Node 생성 확인하기

1) Bastion EC2 접속
$ kubectl get nodes #생성된 개수 뜨면 성공

5) Pod 생성 후 접속하기

5-1) pod 생성하기 위한 yaml 파일 만들기

$ vi nginx-pod.yaml
"""
apiVersion: v1
kind: Pod
metadata:
  name: my-nginx-pod
spec:
  containers:
    - name: nginx
      image: nginx:latest
      ports:
        - containerPort: 80
"""
$ kubectl apply -f nginx-pod.yaml #yaml 파일 배포
$ kubectl get pods #생성 pods 확인
$ kubectl describe pod my-nginx-pod #생성된 pod 세부사항 확인
$ kubectl port-forward pod/my-nginx-pod 8080:80 #포트포워팅 실행

 

5-2) 생성된 Pod에 접속하기

kubectl exec -it my-nginx-pod -- /bin/bash