[K8S-Goat] install on EKS

쥬스몬·2023년 3월 29일
0

K8S-Goat

목록 보기
1/6
post-thumbnail

매번 공부를 미루던 k8s에 대한 찍먹을 위해 k8s-goat 프로젝트를 통해 찍먹을 진행한다. 해당 goat 프로젝트에서는 k8s 환경에서 발생할 수 있는 misconfigurations, 취약점, 보안 문제를 의도적으로 취약하게 구성되어있으며 이를 통해 공격을 진행하며 학습한다.

k8s-goat은 AWS, GCP, Azure, K3S 등 다양한 환경에서의 설치를 지원한다! 여기서 나는 AWS EKS 환경에서 k8s-goat을 구성한다.

🚨 EKS 환경에서 k8s-goat을 설치할 경우 생성되는 노드들에 대한 설정이 미흡하여 minikube를 통해 로컬 쿠버네티스 환경에서 구축하는 것을 추천

✅ EKS환경에서 k8s-goat을 구성하려면 기본적으로 아래와 같은 세팅이 필요함.
1️⃣ eksctl 설치 (참고)
2️⃣ kubectl 설치 (참고)
3️⃣ awscli 설치 및 aws configure 설정 (참고)
4️⃣ helm 설치 (참고)

이후 아래와 같은 명령을 통해 t4g.medium 유형의 두개의 노드가 있는 k8s-goat-cluster라는 EKS 클러스터를 생성한다.

eksctl create cluster --name k8s-goat-cluster \
--region [Region] \
--node-type t4g.medium \
--nodes 2

클러스터가 생성 완료됐으면 아래 명령을 통해 $HOME/.kube/config 파일을 업데이트한다.

aws eks update-kubeconfig --name k8s-goat-cluster --region [Region]

클러스터 구성이 정상적으로 추가되었고 컨텍스트가 제대로 설정되었는지 다음 명령을 통해 확인 가능하다.

kubectl cluster-info

이제 k8s-goat를 clone하여 설치해준다.

git clone https://github.com/madhuakula/kubernetes-goat.git
cd kubernetes-goat/
bash setup-kubernetes-goat.sh

정상적으로 파드들이 생성됐는지 확인을 위해 kubectl get pods 명령으로 파드들을 확인하니 health-check 파드가 몇분째 ContainerCreating 상태로 정상동작을 하지 않고있다.

kubectl describe pod [파드명] 명령으로 로그를 보니 몇가지 에러가 보인다.

Events:
  Type     Reason       Age                   From               Message
  ----     ------       ----                  ----               -------
  Normal   Scheduled    42m                   default-scheduler  Successfully assigned default/health-check-deployment-77c7b6686-ljtc5 to ip-192-168-47-94.ap-northeast-2.compute.internal
  Warning  FailedMount  31m (x3 over 36m)     kubelet            Unable to attach or mount volumes: unmounted volumes=[docker-sock-volume], unattached volumes=[kube-api-access-fg87z docker-sock-volume]: timed out waiting for the condition
  Warning  FailedMount  6m37s (x12 over 40m)  kubelet            Unable to attach or mount volumes: unmounted volumes=[docker-sock-volume], unattached volumes=[docker-sock-volume kube-api-access-fg87z]: timed out waiting for the condition
  Warning  FailedMount  2m3s (x28 over 42m)   kubelet            MountVolume.SetUp failed for volume "docker-sock-volume" : hostPath type check failed: /var/run/docker.sock is not a socket file

kubernetes-goat의 이슈 중 Health Check Deployment Pod not running에서 현재 상황과 동일한 문제가 이슈로 등록되었고 kubernetes-goat/scenarios/health-check/deployment.yaml 파일에서 33번 라인의 /var/run/docker.sock/var/run/containerd/containerd.sock로 수정하고 다시 setup bash 파일(setup-kubernetes-goat.sh)을 실행하면 변경이 없는 파드들은 unchanged, 변경을 준 health-check 파드만 configured되면서 파드가 재설정된다.

# kubernetes-goat/scenarios/health-check/deployment.yaml
# 수정한 volumes 정의 부분

      volumes:
        - name: docker-sock-volume
          hostPath:
            path: /var/run/containerd/containerd.sock
            type: Socket

마지막으로 생성한 k8s-goat에 접근할 수 있도록 포트 포워딩 작업을 수행하는 스크립트를 실행한다.

bash access-kubernetes-goat.sh

쿠버네티스 찍먹 준비 끝!

참고로 포트포워드를 종료하려면 pkill kubectl -9

profile
블로그 이사 (https://juicemon-code.github.io/)

0개의 댓글