SG 생성하기

1. 사전 준비하기

이번 실습에서는 m5.large 인스턴스를 사용하여 두 번째 노드 그룹을 만들 것입니다. (약 10분 정도 소요됩니다.)

mkdir sg-per-pod

cat << EoF > ${HOME}/environment/sg-per-pod/nodegroup-sec-group.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: eksworkshop-eksctl
  region: ${AWS_REGION}

managedNodeGroups:
- name: nodegroup-sec-group
  desiredCapacity: 1
  instanceType: m5.large
EoF

eksctl create nodegroup -f ${HOME}/environment/sg-per-pod/nodegroup-sec-group.yaml

 kubectl get nodes \
  --selector beta.kubernetes.io/instance-type=m5.large

2. 보안 그룹 생성 및 구성

먼저 RDS 보안 그룹 (RDS_SG)를 작성합니다. 네트워크 액세스를 제어하기 위해 Amazon RDS 인스턴스에서 사용할 것입니다.

export VPC_ID=$(aws eks describe-cluster \
    --name eksworkshop-eksctl \
    --query "cluster.resourcesVpcConfig.vpcId" \
    --output text)

# create RDS security group
aws ec2 create-security-group \
    --description 'RDS SG' \
    --group-name 'RDS_SG' \
    --vpc-id ${VPC_ID}

# save the security group ID for future use
export RDS_SG=$(aws ec2 describe-security-groups \
    --filters Name=group-name,Values=RDS_SG Name=vpc-id,Values=${VPC_ID} \
    --query "SecurityGroups[0].GroupId" --output text)

echo "RDS security group ID: ${RDS_SG}"

이제 POD 보안 그룹(POD_SG)을 만듭니다.

# create the POD security group
aws ec2 create-security-group \
    --description 'POD SG' \
    --group-name 'POD_SG' \
    --vpc-id ${VPC_ID}

# save the security group ID for future use
export POD_SG=$(aws ec2 describe-security-groups \
    --filters Name=group-name,Values=POD_SG Name=vpc-id,Values=${VPC_ID} \
    --query "SecurityGroups[0].GroupId" --output text)

echo "POD security group ID: ${POD_SG}"

파드는 DNS resolution으로 노드와 통신해야 하므로 이에 따라 노드 그룹의 보안 그룹을 업데이트 합니다.

export NODE_GROUP_SG=$(aws ec2 describe-security-groups \
    --filters Name=tag:Name,Values=eks-cluster-sg-eksworkshop-eksctl-* Name=vpc-id,Values=${VPC_ID} \
    --query "SecurityGroups[0].GroupId" \
    --output text)
echo "Node Group security group ID: ${NODE_GROUP_SG}"

TCP 53번 포트를 사용하여 POD_SG가 NODE_GROUP_SG에 연결하도록 허용합니다

aws ec2 authorize-security-group-ingress \
    --group-id ${NODE_GROUP_SG} \
    --protocol tcp \
    --port 53 \
    --source-group ${POD_SG}
    

UDP 53번 포트를 사용하여 POD_SG가 NODE_GROUP_SG에 연결하도록 허용합니다.

aws ec2 authorize-security-group-ingress \
    --group-id ${NODE_GROUP_SG} \
    --protocol udp \
    --port 53 \
    --source-group ${POD_SG}
    

마지막으로 RDS_SG 보안 그룹에 2개의 인바운드 트래픽 (ingress) 규칙을 추가합니다:

  • 한개는 Cloud9 용 (데이터베이스를 채우기 위해)

  • 다른 하나는 POD_SG 보안 그룹이 데이터베이스에 연결할 수 있도록 합니다.

Cloud9 IP를 가져옵니다.

export C9_IP=$(curl -s http://169.254.169.254/latest/meta-data/public-ipv4)

Cloud9이 RDS에 연결 하도록 허용합니다.

aws ec2 authorize-security-group-ingress \
    --group-id ${RDS_SG} \
    --protocol tcp \
    --port 5432 \
    --cidr ${C9_IP}/32
    

POD_SG가 RDS에 연결 하도록 허용합니다.

aws ec2 authorize-security-group-ingress \
    --group-id ${RDS_SG} \
    --protocol tcp \
    --port 5432 \
    --source-group ${POD_SG}
    

Last updated