# 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

```

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

![](https://1998608250-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhByD5wv8eUbA5ZbUY5%2F-MhERajzx6ESC10mPY5x%2F-MhEa1fSiKO6S0jVB_mD%2Fimage.png?alt=media\&token=f569dfbf-feba-4ce8-8f5b-fe9cb75bcc3b)

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

```
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 파일을 모두 탐색하고 둘 사이의 차이점을 확인 합니다.

![](https://1998608250-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhByD5wv8eUbA5ZbUY5%2F-MhERajzx6ESC10mPY5x%2F-MhEaFxxTjgmzTUz1nYD%2Fimage.png?alt=media\&token=87d6cb31-39f5-4255-9083-29bda38a176e)

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

```
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}

```

![](https://1998608250-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhByD5wv8eUbA5ZbUY5%2F-MhERajzx6ESC10mPY5x%2F-MhEaYA673oLLfmZZxgD%2Fimage.png?alt=media\&token=bc12e143-4a51-4f63-a465-df79b0bfac8a)

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

다음을 확인 합니다.

* ENI가 포드에 붙어 있는지 확인 합니다.
* 그리고 ENI에 보안 그룹 POD\_SG가 붙어 있는지 확인 합니다.

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

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

```

![](https://1998608250-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhByD5wv8eUbA5ZbUY5%2F-MhERajzx6ESC10mPY5x%2F-MhEamOQo_e_hZaWlV_7%2Fimage.png?alt=media\&token=91077f12-a5fd-4641-a36c-67878e5a1a0b)

이 [콘솔](https://ap-northeast-2.console.aws.amazon.com/ec2/home?region=ap-northeast-2#NIC:search=POD_SG)를 열어 보안 그룹 POD\_SG가 위에 표시된 `eni`에 연결되어 있는지 확인할 수 있습니다.

![](https://1998608250-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhByD5wv8eUbA5ZbUY5%2F-MhEbAGR5hT0rS3h4K1-%2F-MhEbWYEqS5CZXF0KVOz%2Fimage.png?alt=media\&token=3622539e-c448-4472-8fed-9c783ea3f8a1)

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

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

* 데이터베이스에 연결하고 테이블의 내용을 \_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}

```

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

![](https://1998608250-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhByD5wv8eUbA5ZbUY5%2F-MhEbAGR5hT0rS3h4K1-%2F-MhEbpP0KPabaCuauuwo%2Fimage.png?alt=media\&token=7cfeb5ba-6943-4aa4-993e-5d57224c6f51)

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

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

```

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

![](https://1998608250-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MhByD5wv8eUbA5ZbUY5%2F-MhEbAGR5hT0rS3h4K1-%2F-MhEc2vOUfv2HbacXGXS%2Fimage.png?alt=media\&token=076a1d10-7f7d-42b6-9fa3-d79ecbd00f36)

#### 결론  <a href="#undefined" id="undefined"></a>

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

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

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

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