[NCP] 도메인 구매부터 쿠버네티스 웹서버 배포, SSL 인증서 적용까지 전체적인 내용 정리

NewNewDaddy·2024년 1월 18일
0

Ncloud

목록 보기
3/8
post-thumbnail

🔹0. INTRO

  • 국내 도메인 업체 중 가장 유명한 가비아에서 개인 개발용으로 사용할 도메인을 구매하였다. 종종 특정 접미사(.store, .shop 등등)가 붙은 도메인들에 대해서는 할인률이 엄청 크기 때문에 굉장히 저렴한 가격에 도메인을 구매할 수 있다.👍
  • 고민끝에 justnewnew.store 도메인을 단돈 500원에 구매하였다. 이제 아래 과정들을 통해 SSL이 적용된 Nginx 웹서버 배포를 NKS(Naver Kubernetes Service)에서 진행해볼까 한다.
    1. Ncloud의 Global DNS에 구매한 도메인 등록
    2. Certificate Manager에서 해당 도메인에 대한 SSL 인증서 발급
    3. 쿠버네티스 환경에서 Nginx 웹서버 배포
    4. ALB Ingress Controller 설치
    5. Ingress에 SSL 인증서 적용하여 ALB 통해 외부로 Expose
    6. 도메인에 별칭을 주어 ALB 주소를 A record에 등록
    7. 웹서버 접속 후 HTTPS 통신이 적용 확인

🔹1. 도메인 구매

  • 먼저 가비아 사이트에 들어가서 원하는 도메인을 구매한다.(혹은 다른 도메인 구매 사이트여도 무방하다.)
  • 구매 과정은 인터넷 쇼핑하는 것 같이 원하는 이름의 도메인 검색 후 적당한 가격대의 도메인을 선택하여 구매하면 되므로 자세하게 다루지는 않는다.

🔹2. 클라우드에 도메인 등록

  • 위에서 구매한 도메인을 Ncloud의 Global DNS 서비스에 등록하기 위해서는 두가지 간단한 설정이 필요하다.

    1) 구매한 도메인에 대해 가비아 사이트에서 NCP 네임서버 추가
    2) NCP Global DNS에 등록

📍 1. 가비아 네임서버 설정

  • My가비아 > 도메인 관리 메뉴로 가서 네임서버 관리를 누르고 아래 두 주소를 추가해준다.

    ns1-1.ns-ncloud.com, ns1-2.ns-ncloud.com

📍 2. NCP Global DNS 등록

  • Global DNS > Record > 도메인 추가를 눌러 구매한 도메인을 등록해준다.

🔹3. SSL 인증서 등록

  • NCP에서는 SSL 인증서를 무료로 발급받을 수 있다.

📍 1. 인증서 발급

  • Certificate Manager > Certificate List > 인증서 발급 탭을 눌러준다.

  • 도메인 입력

    • Certificate 이름 : 인증서 이름
    • 도메인 이름 : 구매한 도메인 주소
    • 추가 도메인 이름 1 : 추가적인 도메인 이름 (*.[도메인 이름]의 wildcard 형식으로 설정하여 다양한 관련 도메인들에 대해 모두 인증서가 적용될 수 있도록 하였다.)
  • 검증 방식

    • 검증 방식에는 아래와 같이 두 가지가 있는데 해당 도메인으로 Email을 받을 수는 없기 때문에 DNS 검증방식으로 진행하였다.

      • Email 검증: whois에 공개된 주소 및 공통 주소로 이메일을 전송하여 검증하는 방식.
      • DNS 검증 : DNS 수정 권한을 가지고 있을 경우 검증하는 방식

📍 2. CNAME 등록

  • 인증서 발급 순서를 모두 진행하게 되면 상태가 🟠진행중으로 뜨는 것을 볼 수 있다.

  • 검증 상태 탭에 있는 두가지 도메인에 대해 각각 펼치면 아래와 같이 Global DNS에 등록한 도메인에 대해 CNAME을 추가해달라는 세부 내용을 볼 수 있다.

  • Global DNS 서비스에서 도메인에 대해 Certificate Manager가 요청한 정보대로 CNAME을 각각 추가해준다. (저의 경우 두 건)

  • CNAME 추가 후 설정 적용을 눌러 배포시켜주면 몇 분 지나지 않아 Certificate Manager쪽에 등록한 인증서가 🟢정상으로 바뀐 것을 볼 수 있다.

🔹4. ALB Ingress Controller 설치

🔹5. 서비스 배포 및 Ingress에 SSL 적용

  • NCP에 도메인 등록하고 해당 도메인 주소에 대해 SSL 인증서도 발급받았으니 HTTPS 통신을 위한 준비는 일차적으로 끝났다.

📍 1. Deployment, Service 배포

  • 먼저 SSL 적용이 될 Nginx 웹서버를 쿠버네티스 환경으로 배포한다.

    nginx_deployment_service.yaml

    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deploy
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx
            name: nginx-container
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-svc
    spec:
      selector:
        app: nginx
      type: NodePort
      ports:
      - port: 80
        targetPort: 80

    kubectl apply -f nginx_deployment_service.yaml

📍 2. SSL 설정된 Ingress 배포

  • Ingress 설정에서 중요한 것은 아래 annotations들을 추가해주는 것이다.

    alb.ingress.kubernetes.io/ssl-certificate-no: "23925"
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'

  • ssl-certificate-noCertificate Manager에서 인증서 발급이 완료된 인증서를 펼쳐보면 하단에서 확인이 가능하다.

    nginx_ingress.yaml

    
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-nginx-app
      annotations:
        alb.ingress.kubernetes.io/description: 'nginx Service Ingress'
        alb.ingress.kubernetes.io/load-balancer-name: 'nginx-alb'
        alb.ingress.kubernetes.io/ssl-certificate-no: "23925"
        alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
        alb.ingress.kubernetes.io/enable-sticky-session: "true"
    spec:
      ingressClassName: alb
      defaultBackend:
        service:
          name: nginx-svc
          port:
            number: 80

    kubectl apply -f nginx_ingress.yaml

🔹6. 도메인의 A record 등록

  • A 레코드(A Record 또는 Address Record)는 도메인 이름과 해당 도메인에 대한 IPv4 주소 간의 매핑 정보를 포함하는 DNS 레코드 유형 중 하나로 Ingress로 생성한 ALB의 주소를 내가 등록한 도메인명의 다른 별칭과 매핑해준다.

  • Global DNS > Record > 레코드 추가탭을 누른 후 아래 사진과 같이 추가해준 후 설정 적용을 눌러 새로 등록한 도메인을 배포해준다. 나는 nginx.justnewnew.store로 등록하였다.

    1) 레코드 이름 설정
    2) A record 선택
    3) LB VPC 선택
    4) Nginx 관련 ALB 선택

🔹7. 웹서버 접속 후 HTTPS 통신이 적용 확인

  • DNS 배포 완료 후 약 30초 정도 기다린 다음 위에 설정한 도메인(nginx.justnewnew.store)으로 접속해보면 SSL 인증서가 적용되어 HTTPS로 접속이 잘 되는 것을 확인할 수 있다.
  • 인증서를 확인해보면 Naver에서 발급한 인증서가 잘 적용된 것을 볼 수 있다.

🔹8. OUTRO

  • 도메인 구매부터 SSL 인증서 적용까지의 내용을 다뤄보았다. 인증서를 발급해주는 클라우드 서비스인 NCM(NCP Certificate Manager)이나 ACM(AWS Certificate Manager)를 이용하지 않고는 따로 인증서 발급하는 프로세스를 수동으로 진행해주었어야 했다.
  • 테스트용의 경우 Certbot과 LetsEncrypt를 많이 사용하게 되는데 LetsEncrypt에서 인증서를 발급받은 후에는 Nginx 혹은 HaProxy 웹서버의 설정에 해당 인증서를 반영해주는 귀찮은 과정을 거쳐야했다.
  • Certificate Manager를 통해 인증서를 발급받은 후 Ingress를 통해 배포되는 웹서버에 해당 SSL을 적용하는 과정은 생각보다 훨씬 간단했다. 운영되는 웹서버의 경우에는 당연히 더 다양한 설정들이 추가로 붙어줘야 하겠지만 전체적인 흐름을 학습하기에는 충분했던 것 같다.
profile
데이터 엔지니어의 작업공간 / #PYTHON #CLOUD #SPARK #AWS #GCP #NCLOUD

2개의 댓글

comment-user-thumbnail
2024년 7월 15일

안녕하세요! 좋은 자료에 우선 무한 감사드립니다.
해당 글 보고 실습 중인데
모든 설정이 끝나고,
7. 웹서버 접속 후 HTTPS 통신이 적용 확인이 안되어 문의 드립니다.
제가 등록한 주소로 접속하면 "이 사이트는 보안 연결(HTTPS)이 사용되지 않았습니다."라고 나옵니다.
다른 궁금한 사항은
5. 서비스 배포 및 Ingress에 SSL 적용 -> 1. Deployment, Service 배포 -> nginx_deployment_service.yaml 에서 Service가 NodePort로 설정이 맞는지 문의 드립니다.
제가 아직 부족하여 질문 수준이 낮아도 이해 부탁드립니다.
감사합니다.

1개의 답글