두 개의 파드를 배포하기 전에 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에 보안 그룹 POD_SG가 붙어 있는지 확인 합니다.
이 명령을 사용하여 파드 Annotations
섹션에서 ENI ID를 찾을 수 있습니다.
kubectl -n sg-per-pod describe pod $GREEN_POD_NAME | head -11
빨간색 파드를 배포하고 데이터베이스에 연결할 수 없는지 확인 합니다.
녹색 파드와 마찬가지로 컨테이너가 다음을 시도 합니다.
데이터베이스에 연결하고 테이블의 내용을 _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를 찾고 보안 그룹이 여기에 연결 되었는지 확인할 수 있었습니다.