[NCP] 웹 서버에 Application Load Balancer(ALB) 생성 후 SSL 설정까지의 과정 및 실습

NewNewDaddy·2024년 1월 21일
0

Ncloud

목록 보기
4/8
post-thumbnail

🔹 0. INTRO

  • 앞선 글 "도메인 구매부터 쿠버네티스 웹서버 배포, SSL 인증서 적용까지 전체적인 내용 정리"에서 쿠버네티스 환경에서 배포된 웹서버를 외부로 노출시켜 ALB 적용 및 도메인에 대한 SSL 적용까지 다뤄보았다.
  • 이 과정에서 ALB Ingress ControllerIngress 리소스를 사용하게 되면 Ingress Controller가 자동으로 클라우드에 관련 리소스들을 생성해주어 웹서버에 대한 ALB 연결 및 SSL 적용을 처리해주게된다.
  • 그렇다면 만약 특정 웹서버가 쿠버네티스 기반으로 올라가 있지 않아 수동으로 이러한 리소스들을 생성하려면 어떠한 과정을 거쳐야 할까?
  • 이번 글에서는 특정 서버에서 작동되는 서비스에 대해 Target Group을 생성하고, ALB를 연동하고, Domain 주소를 생성하여 SSL 연결이 될 수 있도록 수동으로 설정하는 과정을 다뤄 볼 것이다.

🔹 1. Service Export

  • 특정 서버 혹은 쿠버네티스 환경에 특정 서비스가 운영되고 있을 때, 외부로 노출되는 그 서비스만의 Port가 있을 것이다. 예를 들어 Nginx는 80, Airflow UI는 8080, Mysql은 3306 등이다.

  • 만약 서버에 자체적으로 서비스가 운영되고 있는 상황이라면 해당 서비스의 Port만 알면되겠지만, 쿠버네티스 상황에서 운영되고 있다면 NodePort 타입의 Service 리소스를 통해 해당 서비스가 외부로 노출될 수 있도록 Port Mapping이 필요하다.

  • 통상적으로 NodePort 타입의 Service는 30000-32767 사이의 포트값을 랜덤으로 매핑하며 필요시 해당 범위에 있는 값을 지정해줄 수도 있다.

  • 따라서 해당 서비스가 어떠한 포트번호를 통해 외부에서 접속이 가능한지를 알아야하며 아래 글에서는 쿠버네티스상에 NodePort 타입으로 배포된 Nginx 웹서버의 포트를 사용 할 것이다.

  • 웹서버 포트 확인

    • Nginx 컨테이너 포트인 80 포트와 외부로 expose되는 30260 포트가 매핑되어있는 것을 확인할 수 있다.
    > kubectl get svc
    
      NAME        TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
      nginx-svc   NodePort   198.19.178.141   <none>        80:30260/TCP     24h

🔹 2. Target Group

  • Target Group은 로드 밸런서가 수신한 트래픽을 어디로 보낼지를 정의하는 개념입니다.
  • Target Group을 설정하게 되면 지정한 특정 서버들에게 특정 포트로 주기적인 Health Check를 수행하게 된다. 그렇게 함으로써 각 서버들에 서비스가 잘 운영중인지 체크를 하고 로드 밸런싱도 가능해지는 것이다.
  • 아래 그림에서 각 노드들에 파란색 서비스, 주황색 서비스가 배포되어 있는데 동일한 서비스들을 묶어 하나의 Target Group을 생성하게되며 이 그룹이 ALB와 연결된다.
  • 또한 Target Group과 ALB 사이의 통신은 보안이 적용되지 않은 HTTP 통신을 하게되는데 이는 서비스가 어짜피 Private Subnet 안에 있어 ALB를 통하지 않고는 외부로 노출되지 않기 때문에 ALB와의 내부적인 통신에서는 보안 적용이 굳이 필요없기 때문이다.
  • Naver Cloud Platform에서 설정 방법
    1) 쿠버네티스상에서 배포된 서비스가 expose된 포트로 HTTP 통신 Health Check가 가능하도록 설정

    2) 서비스가 배포된 노드들을 선택해서 적용 Target으로 설정

🔹 3. Application Load Balancer

  • Load Balancer의 종류에는 ALB, NLB, CLB 등 여러가지 종류가 있지만 그 중 ALB는 OSI 7 Layer 계층에서 동작하며 HTTP, HTTPS 및 기타 애플리케이션 프로토콜을 분석하고 처리하는 기능을 한다.
  • ALB는 위에서 설정한 Target Group과 내부적으로 연결되며 하나의 Endpoint를 통해 여러 노드들에서 서비스되는 지점으로 접근이 가능하기 때문에 부하 분산이 가능한 것이다.
  • Target Group과는 HTTP 통신을 하며 Client가 접근하게되는 Endpoint URL은 SSL/TLS 보안이 설정된 HTTPS 통신을 하게된다.
  • Naver Cloud Platform에서 설정 방법
    1) Application Load Balancer 생성 선택 후 이름 및 기본 VPC 정보들 설정
    2) HTTPS 통신할 수 있게 리스너 설정

    3) Certificate Manager에서 발급받은 인증서 선택

    4) 앞서 생성한 Target Group 선택 후 ALB 생성 완료

🔹 4. DNS A Record

  • 이전 글에서 justnewnew.store 도메인으로 SSL 인증서를 발급받았기 때문에 HTTPS 통신을 위해서는 위에서 생성한 ALB를 DNS A record에 등록해주어야 한다.
  • A record란 도메인 네임을 특정 IP 주소로 가리키는 데 사용되는 레코드로 IPv4 주소를 매핑시킬 수 있다. 또한 클라우드에서는 클라우드 내부적으로 생성된 리소스를 매핑시킬 수도 있다.
  • justnewnew.store 도메인 앞에 nginx라는 별칭을 주고 종류는 LB VPC를 선택하여 앞에서 생성된 ALB 주소를 선택한 후 A record 생성을 완료해준다.
  • Naver Cloud Platform에서 설정 방법
    1) A record에서 LB VPC 선택하여 위에서 생성해준 ALB 선택하여 레코드 생성 후 배포

🔹 5. 웹 서버 연결 확인

  • A Record 생성 후 배포까지 마치면 해당 도메인으로 우리가 배포한 웹서버에 HTTPS로 접속이 가능하다.
  • 전체적이 과정 자체는 그렇게 복잡하지 않지만 중요한 것은 외부로 노출되는 도메인과 ALB 사이의 통신은 HTTPS이고, ALB와 내부의 Target Group간의 통신은 보안설정이 되지 않은 HTTP 통신을 한다는 것이다.
  • 과정을 도식으로 나타내보면 아래와 같다.
profile
데이터 엔지니어의 작업공간 / #PYTHON #SPARK #AWS #NCLOUD

2개의 댓글

comment-user-thumbnail
2024년 5월 30일

저 궁금한것이 있는데요 하나의 VPC 내에 Private / Public Subnet을 둘 다 만드신건가요?
아무리 해봐도 하나의 VPC 내에 2개의 Subnet을 만드는 방법이 안보여서요 ㅠㅠ

1개의 답글