Pod 배포하기

두 개의 파드를 배포하기 전에 RDS 엔드 포인트와 암호를 제공해야 합니다. 쿠버네티스 secret을 만듭니다.

export RDS_PASSWORD=$(cat ~/environment/sg-per-pod/rds_password)

export RDS_ENDPOINT=$(aws rds describe-db-instances \
    --db-instance-identifier rds-eksworkshop \
    --query 'DBInstances[0].Endpoint.Address' \
    --output text)

kubectl create secret generic rds\
    --namespace=sg-per-pod \
    --from-literal="password=${RDS_PASSWORD}" \
    --from-literal="host=${RDS_ENDPOINT}"

kubectl -n sg-per-pod describe  secret rds

결과는 아래와 유사합니다.

두 파드 배포 파일을 모두 다운로드 합니다.

cd ~/environment/sg-per-pod

curl -s -O https://www.eksworkshop.com/beginner/115_sg-per-pod/deployments.files/green-pod.yaml
curl -s -O https://www.eksworkshop.com/beginner/115_sg-per-pod/deployments.files/red-pod.yaml

두개의 YAML 파일을 모두 탐색하고 둘 사이의 차이점을 확인 합니다.

먼저 녹색 파드를 배포 합니다.

kubectl -n sg-per-pod apply -f ~/environment/sg-per-pod/green-pod.yaml

kubectl -n sg-per-pod rollout status deployment green-pod

컨데이너는 다음을 시도 합니다:

  • 데이터베이스에 연결하고 테이블의 내용을 _stdout_에 출력합니다.

  • 데이터베이스 연결이 실패한 경우 오류 메시지가 _stdout_에 출력됩니다.

로그를 확인 합니다.

export GREEN_POD_NAME=$(kubectl -n sg-per-pod get pods -l app=green-pod -o jsonpath='{.items[].metadata.name}')

kubectl -n sg-per-pod  logs -f ${GREEN_POD_NAME}

로그를 종료할 때는 _CTRL+C_를 사용 합니다.

다음을 확인 합니다.

  • ENI가 포드에 붙어 있는지 확인 합니다.

  • 그리고 ENI에 보안 그룹 POD_SG가 붙어 있는지 확인 합니다.

이 명령을 사용하여 파드 Annotations 섹션에서 ENI ID를 찾을 수 있습니다.

kubectl -n sg-per-pod  describe pod $GREEN_POD_NAME | head -11

콘솔를 열어 보안 그룹 POD_SG가 위에 표시된 eni에 연결되어 있는지 확인할 수 있습니다.

빨간색 파드를 배포하고 데이터베이스에 연결할 수 없는지 확인 합니다.

녹색 파드와 마찬가지로 컨테이너가 다음을 시도 합니다.

  • 데이터베이스에 연결하고 테이블의 내용을 _stdout_에 출력 합니다.

  • 데이터베이스 연결이 실패한 경우 오류 메시지가 _stdout_에 출력 됩니다.

kubectl -n sg-per-pod apply -f ~/environment/sg-per-pod/red-pod.yaml

kubectl -n sg-per-pod rollout status deployment red-pod

로그를 확인 합니다 (_CTRL+C_를 사용하여 로그를 종료 합니다).

export RED_POD_MAME=$(kubectl -n sg-per-pod get pods -l app=red-pod -o jsonpath='{.items[].metadata.name}')

kubectl -n sg-per-pod  logs -f ${RED_POD_MAME}

결과는 아래와 같이 데이터베이스에 연결 할 수 없습니다.

마지막으로 파드에 enitId annotation가 없는지 확인 합니다.

kubectl -n sg-per-pod  describe pod ${RED_POD_MAME} | head -11

결과는 아래와 유사합니다.

결론

이 모듈 에서는 파드별 보안 그룹 기능을 활성화 하도록 EKS 클러스터를 구성 했습니다.

SecurityGroup 정책을 생성하고 2개의 파드(동일한 도커 이미지 사용)와 보안 그룹으로 보호되는 RDS 데이터베이스를 배포 했습니다.

이 정책에 따라 두 파드 중 하나만 데이터베이스에 연결할 수 있었습니다.

마지막으로 CLI와 AWS 콘솔을 사용하여 파드의 ENI를 찾고 보안 그룹이 여기에 연결 되었는지 확인할 수 있었습니다.

Last updated