[AWS EKS] EKS 클러스터 배포

주영·2025년 2월 7일
0

이 글은 CloudNet@팀의 AWS EKS Workshop Study(AEWS) 3기 스터디 내용을 바탕으로 작성되었습니다.
AEWS는 CloudNet@의 '가시다'님께서 진행하는 스터디로, EKS를 학습하는 과정입니다.
EKS를 깊이 있게 이해할 기회를 주시고, 소중한 지식을 나눠주시는 가시다님께 다시 한번 감사드립니다.
이 글이 EKS를 학습하는 분들께 도움이 되길 바랍니다.

0. 사전 준비

  • AWS Free Tier 계정 생성 - 링크
    • IAM User 생성 : IAM 정책(AdministratorAccess) 부여
  • AWS Route53 퍼블릭 호스팅 영역(도메인) 구입

1. EKS 배포 방식

✅ 웹 관리 콘솔 (AWS Management Console)

  • AWS 웹 콘솔에서 클릭 몇 번으로 EKS 클러스터를 생성하고 관리할 수 있는 GUI 기반 배포 방식
  • 초보자에게 적합하며, 빠르게 클러스터를 생성할 수 있음
  • 그러나 자동화 및 버전 관리는 어렵고, 운영 효율성이 낮음

✅ eksctl (EKS CLI 도구)

  • Weaveworks와 AWS가 공동 개발한 오픈소스 명령줄 도구
  • eksctl을 사용하면 간단한 명령어 한 줄로 EKS 클러스터를 생성 가능
  • 내부적으로 AWS CloudFormation을 사용하여 스택(Stack) 단위로 클러스터 리소스를 생성

📌 특징:

  • 단순하고 직관적인 명령어 제공 → eksctl create cluster
  • AWS CloudFormation을 통해 클러스터 리소스 생성 및 업데이트
  • EKS 클러스터 및 노드 그룹(Node Group) 관리 가능
  • 스크립트 및 자동화 가능하지만, 완전한 IaC(Infrastructure as Code) 방식은 아님

🔗 관련 자료

✅ IaC(Infrastructure as Code) 기반 배포

  • EKS를 코드로 정의하고 자동화할 수 있는 방법
  • DevOps 환경에서 주로 사용되며, 재현 가능성(Repeatability)과 유지보수성(Manageability)이 뛰어남
  • Terraform, AWS CDK, CloudFormation 등을 사용하여 배포 가능

📌 주요 도구 비교:

도구특징
AWS CloudFormationAWS 네이티브 IaC 도구, YAML/JSON으로 인프라 관리
AWS CDKTypeScript, Python, Java 등으로 인프라를 코드화
Terraform멀티 클라우드 지원, HashiCorp에서 제공하는 강력한 IaC 도구

🔗 관련 자료: Terraform을 활용한 EKS 배포

2. 기본 인프라 구성


3. EKS 배포

3-1. CloudFormation으로 기본 인프라 배포

EKS를 배포하기 위한 VPC, 서브넷, 작업용 EC2 등을 배포합니다. EKS 클러스터를 배포하기 전 수행해야 할 필수 작업입니다.

  • 파라미터: 아래 설정 외 부분은 기본값 사용함
    1. <<<<< EKSCTL MY EC2 >>>>>
      • ClusterBaseName: EKS 클러스터의 기본 이름 (생성되는 리소스들의 주석에 접두어로 활용), EKS 클러스터 이름에 '_(밑줄)' 사용 불가!
      • KeyName: EC2 접속에 사용하는 SSH 키페어 지정
      • SgIngressSshCidr: eksctl 작업을 수행할 EC2 인스턴스를 접속할 수 있는 IP 주소 입력 (집 공인IP/32 입력)
      • MyInstanceType: eksctl 작업을 수행할 EC2 인스턴스의 타입 (기본 t3.medium)
    2. <<<<< Region AZ >>>>> : 리전과 가용영역을 지정
    3. <<<<< VPC Subnet >>>>> : VPC, 서브넷 정보 지정

→ VPC, InternetGateway, 서브넷(Public, Private 각 2개씩), 보안그룹, EC2 1개(bastion)가 생성됩니다.

AWS CLI를 사용하여 배포할 경우

// yaml 파일 다운로드
$ curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/myeks-1week.yaml
// 배포
$ aws cloudformation deploy --template-file ~/Downloads/myeks-1week.yaml --stack-name mykops --parameter-overrides KeyName=<My SSH Keyname> SgIngressSshCidr=<My Home Public IP Address>/32 --region <리전>
예시) $ aws cloudformation deploy --template-file ~/Downloads/myeks-1week.yaml \
     --stack-name myeks --parameter-overrides KeyName=kp-gasida SgIngressSshCidr=$(curl -s ipinfo.io/ip)/32 --region ap-northeast-2

3-2. 작업용 EC2 인스턴스 확인 및 SSH 접속

🔹 EC2 인스턴스의 퍼블릭 IP 확인

  • 방법 1: 웹 콘솔 > CloudFormation > 스택 > 출력
  • 방법 2: 웹 콘솔 > EC2 > 인스턴스 > 네트워킹 > 퍼블릭 IPv4 주소
  • 방법 3
    aws cloudformation describe-stacks --stack-name myeks \
        --query 'Stacks[*].Outputs[*].OutputValue' --output text
    📌 출력:

🔹 SSH 접속

  • password는 myeks-1week.yaml 파일에 있습니다.
ssh root@3.35.137.31
또는 AWS CLI를 활용하여 자동으로 접속
ssh root@$(aws cloudformation describe-stacks --stack-name myeks \
    --query 'Stacks[*].Outputs[0].OutputValue' --output text)

📌 출력:

3-3. EC2 환경 설정 확인 (기본 툴 및 패키지 점검)

SSH로 EC2에 접속한 후, 기본적인 환경이 올바르게 설정되었는지 확인합니다.

🔹 Cloud-Init 실행 로그 확인 (옵션)

CloudFormation을 통해 배포된 EC2에서는 cloud-init이 실행되며, 초기 설정을 수행합니다.

tail -f /var/log/cloud-init-output.log

이 로그를 통해 설치 과정에서 발생한 오류를 확인할 수 있습니다.

🔹 현재 사용자 확인

whoami

📌 출력:

🔹 필수 도구 및 SSH 키 파일 확인

배포 환경에서 필요한 kubectl, eksctl, aws-cli, SSH 키 파일이 정상적으로 설치되었는지 확인합니다.

kubectl version --client=true -o yaml
eksctl version
aws --version
ls /root/.ssh/id_rsa*

📌 출력:

🔹 도커 엔진 설치 확인

docker info

설치가 되어 있어야 EKS 노드 구성이 정상적으로 진행됩니다.
📌 출력:

3-4. IAM 자격 증명 설정 및 확인

EKS 리소스를 배포하고 관리하려면 IAM 사용자 권한을 올바르게 설정해야 합니다.

🔹 현재 IAM 권한으로 EC2 인스턴스 정보 조회

IAM 자격 증명이 설정되지 않은 상태에서 EC2 인스턴스 정보를 조회하려고 하면 실패합니다.

aws ec2 describe-instances

📌 권한이 없으면 아래와 같은 에러가 발생:

An error occurred (UnauthorizedOperation) when calling the DescribeInstances operation:
You are not authorized to perform this operation.

🔹 IAM User 자격 구성

EKS 배포를 위해 administrator 권한을 가진 IAM User의 자격 증명을 설정해야 합니다. 액세스 키가 없으면 생성합니다.

aws configure

📌 출력:

액세스 키 생성 방법

  • 웹 콘솔 > IAM > 액세스 관리 > 사용자 > 보안 자격 증명 > 액세스 키 > 액세스 키 만들기

🔹 IAM 설정 적용 확인

aws ec2 describe-instances

정상적으로 출력되면 IAM 자격 증명 설정 완료

📌 출력:

3-5. EKS 배포를 위한 네트워크 환경 확인

EKS는 VPC 내부에 배포되므로, 적절한 VPC 및 서브넷 설정이 필요합니다.
다음 명령어를 사용하여 EKS 배포할 VPC 및 서브넷 정보를 확인합니다.

🔹 EKS 배포할 VPC 정보 확인

aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq

📌 출력:

🔹 VPC ID를 환경 변수로 저장

export VPCID=$(aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq -r .Vpcs[].VpcId)
echo "export VPCID=$VPCID" >> /etc/profile
echo $VPCID

📌 출력:

🔹 VPC 내 Subnet 정보 확인

aws ec2 describe-subnets --filters "Name=vpc-id,Values=$VPCID" --output json | jq
aws ec2 describe-subnets --filters "Name=vpc-id,Values=$VPCID" --output yaml

📌 출력:

🔹 퍼블릭 서브넷 ID 확인

aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet1" --query "Subnets[0].[SubnetId]" --output text
aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet2" --query "Subnets[0].[SubnetId]" --output text

🔹 퍼블릭 서브넷 ID를 환경 변수로 저장

export PubSubnet1=$(aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet1" --query "Subnets[0].[SubnetId]" --output text)
export PubSubnet2=$(aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet2" --query "Subnets[0].[SubnetId]" --output text)
echo "export PubSubnet1=$PubSubnet1" >> /etc/profile
echo "export PubSubnet2=$PubSubnet2" >> /etc/profile
echo $PubSubnet1
echo $PubSubnet2

📌 출력:

3-6. EKS Add-on 정보 확인

EKS는 네트워크, 스토리지, 보안, 모니터링 등을 지원하는 Add-on을 제공하며, Kubernetes 버전에 따라 지원 가능한 Add-on 버전이 다릅니다.
따라서 EKS를 운영할 때는 최신 Kubernetes 버전보다는 두세 버전 아래 단계의 안정적인 Kubernetes 버전을 선택하는 것이 권장됩니다.

📌 이유:

  • Kubernetes 버전이 올라가도 Add-on이 즉시 지원되지 않을 수 있음
  • AWS에서 Add-on 호환성 테스트를 거쳐야 하므로 최신 Kubernetes 버전은 일부 Add-on과 충돌 가능
  • 운영 안정성을 위해 최신 Kubernetes보다 검증된 버전을 선택하는 것이 좋음

🔹 특정 Kubernetes 버전에서 사용 가능한 Add-on 확인

aws eks describe-addon-versions --kubernetes-version 1.32  --query 'addons[].{MarketplaceProductUrl: marketplaceInformation.productUrl, Name: addonName, Owner: owner Publisher: publisher, Type: type}' --output table
aws eks describe-addon-versions --kubernetes-version 1.31  --query 'addons[].{MarketplaceProductUrl: marketplaceInformation.productUrl, Name: addonName, Owner: owner Publisher: publisher, Type: type}' --output table
aws eks describe-addon-versions --kubernetes-version 1.30  --query 'addons[].{MarketplaceProductUrl: marketplaceInformation.productUrl, Name: addonName, Owner: owner Publisher: publisher, Type: type}' --output table
aws eks describe-addon-versions --kubernetes-version 1.29  --query 'addons[].{MarketplaceProductUrl: marketplaceInformation.productUrl, Name: addonName, Owner: owner Publisher: publisher, Type: type}' --output table

📌 출력:

🔹 특정 Kubernetes 버전에서 사용 가능한 Add-on 개수 비교
EKS에서 제공하는 Kubernetes 버전별 Add-on 지원 개수를 비교하여 최신 버전과 안정적인 버전 간 차이를 확인해 보겠습니다.

aws eks describe-addon-versions --kubernetes-version 1.32  --query 'addons[].{MarketplaceProductUrl: marketplaceInformation.productUrl, Name: addonName, Owner: owner Publisher: publisher, Type: type}' --output text | wc -l
aws eks describe-addon-versions --kubernetes-version 1.31  --query 'addons[].{MarketplaceProductUrl: marketplaceInformation.productUrl, Name: addonName, Owner: owner Publisher: publisher, Type: type}' --output text | wc -l
aws eks describe-addon-versions --kubernetes-version 1.30  --query 'addons[].{MarketplaceProductUrl: marketplaceInformation.productUrl, Name: addonName, Owner: owner Publisher: publisher, Type: type}' --output text | wc -l
aws eks describe-addon-versions --kubernetes-version 1.29  --query 'addons[].{MarketplaceProductUrl: marketplaceInformation.productUrl, Name: addonName, Owner: owner Publisher: publisher, Type: type}' --output text | wc -l
aws eks describe-addon-versions --kubernetes-version 1.28  --query 'addons[].{MarketplaceProductUrl: marketplaceInformation.productUrl, Name: addonName, Owner: owner Publisher: publisher, Type: type}' --output text | wc -l
aws eks describe-addon-versions --kubernetes-version 1.27  --query 'addons[].{MarketplaceProductUrl: marketplaceInformation.productUrl, Name: addonName, Owner: owner Publisher: publisher, Type: type}' --output text | wc -l

📌 출력:

✔ EKS에서 안정적인 Kubernetes 버전 선택 기준

  • 최신 Kubernetes 버전(1.32)은 Add-on 지원이 부족하여 프로덕션 환경에서는 권장되지 않음
  • 운영 환경에서는 두세 버전 아래의 안정적인 Kubernetes 버전(1.28~1.30)을 선택하는 것이 유리
  • Add-on 지원 여부를 항상 사전에 확인하고, 호환성이 검증된 상태에서 버전 업그레이드 진행

🔹 특정 Add-on의 전체 버전 정보 및 기본 설치 버전 확인

ADDON=vpc-cni
aws eks describe-addon-versions \
    --addon-name $ADDON \
    --kubernetes-version 1.31 \
    --query "addons[].addonVersions[].[addonVersion, compatibilities[].defaultVersion]" \
    --output text

📌 출력:
True = 기본 설치 버전

🔹 특정 Add-on의 버전별 호환 EKS 버전 확인

ADDON_NAME=aws-ebs-csi-driver
aws eks describe-addon-versions --addon-name $ADDON_NAME | jq -r '
  .addons[] |
  .addonVersions[] |
  select(.architecture[] | index("amd64")) |
  [.addonVersion, (.compatibilities[] | .clusterVersion), (.compatibilities[] | .defaultVersion)] |
  @tsv'

📌 출력:

3-7. eksctl을 활용한 EKS 클러스터 배포 연습 (Dry-Run 모드)

AWS eksctl은 EKS 클러스터를 쉽게 생성하고 관리할 수 있도록 돕는 명령줄 도구입니다.
Dry-Run 모드를 활용하여 실제 클러스터를 배포하지 않고 설정을 미리 확인하는 방법을 정리했습니다.
Dry-Run 기능을 활용하면 EKS 클러스터의 설정을 사전에 검토하고, 원하는 배포 구성을 조정한 후 실제 배포를 진행할 수 있습니다.

1. eksctl 소개 및 도움말 활용

🔹 eksctl 기본 도움말 확인

eksctl
eksctl create
eksctl create cluster --help
eksctl create nodegroup --help

이 명령어를 실행하면 eksctl의 기본 사용법과 클러스터 및 노드 그룹 생성 옵션을 확인할 수 있습니다.
📌 출력:

🔹 지원되는 스키마(Schema) 확인
eksctl utils schema 명령어를 사용하면, eksctl에서 지원하는 클러스터 및 노드 그룹 설정을 JSON 형식으로 출력할 수 있습니다.

eksctl utils schema | jq

📌 출력:

2. Dry-Run을 활용한 EKS 클러스터 배포 시뮬레이션

Dry-Run 모드를 사용하면 클러스터를 실제로 배포하지 않고, 어떤 설정이 적용될지를 확인할 수 있습니다.
아래는 다양한 클러스터 배포 시나리오에 대한 Dry-Run 예제입니다.

2.1. 기본 EKS 클러스터 생성 (노드 그룹 없이)

eksctl create cluster --name myeks --region=ap-northeast-2 --without-nodegroup --dry-run | yh

📌 출력:

📌 설명:

  • 노드 그룹 없이 기본적인 컨트롤 플레인만 생성
  • EKS가 자동으로 가용 영역(Availability Zones)을 선택하여 배포

2.2. 특정 가용 영역을 지정하여 EKS 클러스터 생성
--zones 옵션

eksctl create cluster --name myeks --region=ap-northeast-2 --without-nodegroup --zones=ap-northeast-2a,ap-northeast-2c --dry-run | yh

📌 출력:

📌 설명:

  • 사용할 가용 영역을 직접 지정하여 클러스터 배포 가능
  • ap-northeast-2a, ap-northeast-2c 두 개의 AZ에서만 클러스터를 운영

2.3. 관리형 노드 그룹이 포함된 EKS 클러스터 배포
--nodegroup-name, --node-type, --node-volume-size, --vpc-cidr 옵션

eksctl create cluster --name myeks --region=ap-northeast-2 --nodegroup-name=mynodegroup --node-type=t3.medium --node-volume-size=30 \
--zones=ap-northeast-2a,ap-northeast-2c --vpc-cidr=172.20.0.0/16 --dry-run | yh

📌 출력:

📌 설명:

  • 관리형 노드 그룹(Managed Node Group) 포함
  • 인스턴스 타입: t3.medium
  • EBS 볼륨 크기: 30GB
  • VPC CIDR 블록을 172.20.0.0/16으로 설정

2.4. Ubuntu 기반 관리형 노드 그룹 포함 + SSH 접속 허용
--ssh-access, --node-ami-family 옵션

eksctl create cluster --name myeks --region=ap-northeast-2 \
  --nodegroup-name=mynodegroup --node-type=t3.medium --node-volume-size=30 \
  --zones=ap-northeast-2a,ap-northeast-2c --vpc-cidr=172.20.0.0/16 \
  --ssh-access --node-ami-family Ubuntu2004 --dry-run | yh

📌 출력:

📌 설명:

  • 노드 그룹의 AMI를 Ubuntu 20.04로 지정
  • SSH 접속 허용 (--ssh-access) → ~/.ssh/id_rsa.pub에 등록된 키로 접속 가능

3. Dry-Run을 활용한 EKS 배포 테스트의 이점

✔ 실제 리소스를 배포하지 않고도 YAML 설정을 미리 확인 가능
✔ EKS 클러스터 설정이 올바른지 점검 후 배포 가능
✔ 배포 전 가용 영역, VPC CIDR, 노드 그룹 설정을 검토하여 오류 방지

3-8. eksctl로 EKS 배포

eksctl을 활용하여 EKS 클러스터 및 관리형 노드 그룹을 배포하는 과정을 정리했습니다.

1. 변수 확인 및 환경 설정

EKS 클러스터를 배포하기 전에 환경 변수가 올바르게 설정되었는지 확인합니다.

echo $AWS_DEFAULT_REGION
echo $CLUSTER_NAME
echo $VPCID
echo $PubSubnet1,$PubSubnet2

📌 설명:

  • AWS_DEFAULT_REGION → 현재 AWS 리전 확인
  • CLUSTER_NAME → 생성할 EKS 클러스터 이름 확인
  • VPCID → 사용할 VPC ID 확인
  • PubSubnet1, PubSubnet2 → EKS 클러스터가 배포될 퍼블릭 서브넷 확인

📌 출력:

2. EC2 인스턴스 생성 모니터링 (선택 사항)

배포 중 EC2 인스턴스 상태를 모니터링하려면 아래 명령어를 실행하여 실시간으로 확인할 수 있습니다.

🔹 실시간 EC2 인스턴스 상태 모니터링

while true; do aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,PrivateIPAdd:PrivateIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" \
    --filters Name=instance-state-name,Values=running --output text ; echo "------------------------------" ; sleep 1; done
aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,PrivateIPAdd:PrivateIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --filters Name=instance-state-name,Values=running --output table

📌 설명:

  • 실시간 확인: while true; do ...; sleep 1; done → 1초마다 EC2 인스턴스의 상태를 계속 확인
  • Public & Private IP 출력 → 생성된 인스턴스의 공인/사설 IP 확인

📌 출력:

3. EKS 클러스터 & 관리형 노드 그룹 배포 전 정보 확인 (Dry-Run 모드)

배포 전에 Dry-Run 모드를 사용하여 설정을 미리 확인합니다.

eksctl create cluster --name $CLUSTER_NAME --region=$AWS_DEFAULT_REGION \
  --nodegroup-name=$CLUSTER_NAME-nodegroup --node-type=t3.medium \
  --node-volume-size=30 --vpc-public-subnets "$PubSubnet1,$PubSubnet2" \
  --version 1.31 --ssh-access --external-dns-access --dry-run

📌 출력(일부 발췌):

📌 설명:

  • Dry-Run 모드를 사용하여 배포 전에 설정을 확인 (실제 배포 X)
  • 클러스터가 배포될 VPC와 서브넷 정보 미리 확인 가능
  • publicAccess: true → API 서버가 퍼블릭 엔드포인트를 통해 접근 가능

4. EKS 클러스터 & 관리형 노드 그룹 배포 (실제 배포)

EKS 클러스터 및 관리형 노드 그룹을 실제 배포합니다.
배포에는 약 15분 정도 소요됩니다.

eksctl create cluster --name $CLUSTER_NAME --region=$AWS_DEFAULT_REGION \
  --nodegroup-name=$CLUSTER_NAME-nodegroup --node-type=t3.medium \
  --node-volume-size=30 --vpc-public-subnets "$PubSubnet1,$PubSubnet2" \
  --version 1.31 --ssh-access --external-dns-access --verbose 4

📌 설명:

  • 클러스터 및 관리형 노드 그룹을 생성
  • --verbose 4 옵션을 추가하여 배포 진행 상황을 상세히 확인 가능

📌 출력 (일부 발췌):

📌 설명:

  • 배포 완료 후, kubeconfig 파일이 자동으로 생성됨

5. 배포 완료 후 리소스 확인

배포가 완료되면 AWS 콘솔에서 EKS 클러스터 및 관련 리소스를 확인합니다.

1️⃣ AWS CloudFormation 확인
eksctl은 내부적으로 AWS CloudFormation을 사용하여 클러스터를 배포합니다.
AWS 콘솔에서 CloudFormation 스택을 확인하여 생성된 리소스를 확인할 수 있습니다.

2️⃣ AWS EKS 콘솔에서 클러스터 확인
AWS 콘솔 → EKS 서비스 페이지에서 생성된 클러스터 상태 확인

3️⃣ AWS EC2 콘솔에서 노드 확인
EKS 클러스터의 노드 그룹에 포함된 EC2 인스턴스를 확인할 수 있습니다.

4️⃣ AWS EC2 Auto Scaling Group(ASG) 확인
관리형 노드 그룹은 Auto Scaling Group(ASG)를 통해 자동으로 인스턴스를 관리합니다.
AWS 콘솔에서 EC2 → Auto Scaling Groups에서 확인 가능


4. EKS 클러스터 정보 확인 및 진단

EKS 클러스터를 배포한 후에는 클러스터의 상태를 점검하고, 노드 및 네트워크 구성, 파드 정보를 확인하는 작업이 필요합니다.
이 글에서는 kubectl과 AWS CLI를 활용하여 EKS 클러스터의 주요 정보를 확인하는 방법을 정리했습니다.

4-1. Krew 플러그인 및 EKS 클러스터 기본 정보 확인

🔹 Krew 플러그인 목록 확인
Krew는 kubectl 플러그인을 관리할 수 있는 패키지 관리자입니다.
Krew 플러그인을 활용하면 EKS 클러스터를 더욱 효율적으로 관리할 수 있습니다.

kubectl krew list

📌 출력:

🔹 네임스페이스 및 컨텍스트 정보 확인

kubectl ctx  # 현재 사용 중인 컨텍스트 확인
kubectl ns   # 현재 사용 중인 네임스페이스 확인
kubectl ns default  # 기본 네임스페이스로 변경

📌 출력:

🔹 클러스터의 모든 리소스 확인

kubectl get-all  # 모든 네임스페이스에서 실행 중인 리소스 확인

📌 출력:

4-2. EKS 클러스터 정보 조회

🔹 EKS 클러스터 정보 확인

kubectl cluster-info

📌 출력:

🔹 AWS CLI를 활용한 클러스터 정보 확인

eksctl get cluster
aws eks describe-cluster --name $CLUSTER_NAME | jq
// 클러스터의 엔드포인트만 출력하려면
aws eks describe-cluster --name $CLUSTER_NAME | jq -r .cluster.endpoint

📌 출력:

4-3. EKS API 엔드포인트 정보 확인 (도메인 소유 리소스 조회)

🔹 클러스터 API 엔드포인트의 IP 주소 확인

APIDNS=$(aws eks describe-cluster --name $CLUSTER_NAME | jq -r .cluster.endpoint | cut -d '/' -f 3)
dig +short $APIDNS

📌 이 도메인이 어떤 IP를 사용하는지 확인하여, AWS에서 관리하는 리소스인지 검토할 수 있음.

📌 출력:

🔹 EKS API 서버에 직접 요청 (버전 확인)

curl -k -s $(aws eks describe-cluster --name $CLUSTER_NAME | jq -r .cluster.endpoint)/version | jq

📌 클러스터 API 서버가 정상적으로 응답하는지 확인 가능
📌 출력:

도메인 or 출력되는 ip 주소로 https://{IP}/version 외부에서도 접속 가능

4-4. EKS 노드 그룹 정보 확인

🔹 현재 EKS 클러스터의 노드 그룹 정보 확인

eksctl get nodegroup --cluster $CLUSTER_NAME --name $CLUSTER_NAME-nodegroup
aws eks describe-nodegroup --cluster-name $CLUSTER_NAME --nodegroup-name $CLUSTER_NAME-nodegroup | jq

📌 출력:

🔹 클러스터의 노드 정보 확인 (노드 타입, 가용 영역 확인)

kubectl get node --label-columns=node.kubernetes.io/instance-type,eks.amazonaws.com/capacityType,topology.kubernetes.io/zone

📌 노드의 인스턴스 타입, 가용 영역, Capacity Type (On-Demand, Spot 등) 확인 가능

📌 출력:

🔹 모든 노드 정보 요약 출력

kubectl get node
kubectl get node -o wide

📌 출력:

4-5. 인증 정보 확인

🔹 클러스터 인증 로그 확인 (상세 로그 포함)

kubectl get node -v=6

📌 출력:

🔹 kubeconfig 파일 직접 확인

cat /root/.kube/config
kubectl config view
kubectl ctx  # 현재 컨텍스트 확인

📌 출력:

🔹 EKS 인증 토큰 생성 (AWS CLI)

aws eks get-token --cluster-name $CLUSTER_NAME --region $AWS_DEFAULT_REGION

📌 EKS는 IAM을 활용한 인증을 사용하므로, aws eks get-token 명령어로 인증 토큰을 생성하여 API 요청 가능

4-6. 파드 및 네트워크 정보 확인

🔹 특정/모든 네임스페이스의 파드 확인

kubectl get pod -n kube-system
kubectl get pod -n kube-system -o wide
kubectl get pod -A

📌 출력:

🔹 노드/파드 리소스 사용량 확인

kubectl top node  # 노드 리소스 사용량 확인
kubectl top pod -A  # 모든 파드의 리소스 사용량 확인

📌 출력:

🔹 특정/모든 네임스페이스의 모든 리소스 확인

kubectl get-all -n kube-system
kubectl get-all

📌 출력 (일부 발췌):

4-7. 모든 파드의 컨테이너 이미지 정보 확인

클러스터 내 모든 파드에서 사용 중인 컨테이너 이미지 목록을 조회합니다.

kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" | tr -s '[[:space:]]' '\n' | sort | uniq -c

📌 현재 클러스터에서 사용 중인 컨테이너 이미지를 확인하고, 보안 및 버전 점검 가능

📌 출력:

0개의 댓글