GW LABS

AWS 네트워크 (3) - Private 서비스 오픈하기 본문

Infrastructure/Cloud Computing

AWS 네트워크 (3) - Private 서비스 오픈하기

GeonWoo Kim 2021. 8. 2. 13:04

Amazon Web Service

이번 포스팅에서는 Private Subnet에 위치한 서비스들을 외부에 오픈하는 방법에 대해 알아본다. 기본적인 구조는 Private Subnet에는 외부에 노출되지 않는 서비스들을 생성하고, Public Subnet에서는 로드밸런서를 두어서 로드밸런서로 들어온 트래픽을 Private Subnet으로 연결시키는 구조이다. 이번 포스팅에서는 EKS를 사용하여 진행했지만 EC2와 로드밸런서를 직접 생성해서 트래픽을 연결시키는 방법도 공부가 필요하다.


 

전체 아키텍처

실습의 아키텍처

이번 실습의 전체 아키텍처는 다음과 같다. 이전 포스팅에서 Private, Public 서브넷을 나눴다면, Public에 위치해야 할 자원들은 NAT와 로드밸런서이다. EKS와 같은 쿠버네티스를 사용한다면 로드밸런서를 쿠버네티스 서비스를 이용해 자동으로 생성할 수 있다. NAT, 인터넷게이트웨이, 서브넷 생성등의 방법은 이전 포스팅에서 볼 수 있다.

 

 

EKS에 배포할 쿠버네티스 디플로이먼트와 서비스

apiVersion: apps/v1
kind: Deployment
metadata:
    name: sample-deployment
spec:
    replicas: 1
    selector:
        matchLabels:
            app: sample
    template:
        metadata:
            name: sample-pod
            labels:
                app: sample
        spec:
            containers:
            - name: sample
              image: <ECR 이미지 주소>
              ports:
              - containerPort: 8081
---
apiVersion: v1
kind: Service
metadata:
  name: sample-service
  labels:
    app: sample
spec:
  ports:
  - port: 8081
    targetPort: 8081
  selector:
    app: sample
  type: LoadBalancer

위와 같이 서비스타입을 로드밸런서로 지정하면 쿠버네티스 엔진은 로드밸런서를 자동으로 생성할 수 있다. 여기서 주의할 점은 쿠버네티스가 해당 서브넷을 사용할 수 있다고 알려주기 위한 태그를 부여하는 것이다. 서비스가 생성될 Private 서브넷, 로드밸런서가 생성될 Public 서브넷에 각각 Key 값으로 kubernetes.io/cluster/<EKS 클러스터이름>, Value 값으로 shared라고 태그를 부여하지 않으면 EKS는 어디에 로드밸런서를 생성해야할 지 알 수 없게 된다. 이 점을 주의하면 기본적인 EKS 네트워크 구조를 구축할 수 있게 된다.

 

 

Reference

 

Comments