justnewnew.store
도메인을 단돈 500원에 구매하였다. 이제 아래 과정들을 통해 SSL이 적용된 Nginx 웹서버 배포를 NKS(Naver Kubernetes Service)에서 진행해볼까 한다.
- Ncloud의
Global DNS
에 구매한 도메인 등록Certificate Manager
에서 해당 도메인에 대한 SSL 인증서 발급- 쿠버네티스 환경에서 Nginx 웹서버 배포
- ALB Ingress Controller 설치
- Ingress에 SSL 인증서 적용하여 ALB 통해 외부로 Expose
- 도메인에 별칭을 주어 ALB 주소를 A record에 등록
- 웹서버 접속 후 HTTPS 통신이 적용 확인
Global DNS
서비스에 등록하기 위해서는 두가지 간단한 설정이 필요하다. 1) 구매한 도메인에 대해 가비아 사이트에서 NCP 네임서버 추가
2) NCPGlobal DNS
에 등록
My가비아 > 도메인 관리
메뉴로 가서 네임서버 관리
를 누르고 아래 두 주소를 추가해준다.
ns1-1.ns-ncloud.com, ns1-2.ns-ncloud.com
Global DNS > Record > 도메인 추가
를 눌러 구매한 도메인을 등록해준다.Certificate Manager > Certificate List > 인증서 발급
탭을 눌러준다.
도메인 입력
*.[도메인 이름]의 wildcard 형식으로 설정하여 다양한 관련 도메인들에 대해 모두 인증서가 적용될 수 있도록 하였다.
)검증 방식
검증 방식에는 아래와 같이 두 가지가 있는데 해당 도메인으로 Email을 받을 수는 없기 때문에 DNS 검증방식으로 진행하였다.
- Email 검증: whois에 공개된 주소 및 공통 주소로 이메일을 전송하여 검증하는 방식.
- DNS 검증 : DNS 수정 권한을 가지고 있을 경우 검증하는 방식
인증서 발급 순서를 모두 진행하게 되면 상태가 🟠진행중
으로 뜨는 것을 볼 수 있다.
검증 상태
탭에 있는 두가지 도메인에 대해 각각 펼치면 아래와 같이 Global DNS
에 등록한 도메인에 대해 CNAME을 추가해달라는 세부 내용을 볼 수 있다.
Global DNS
서비스에서 도메인에 대해 Certificate Manager
가 요청한 정보대로 CNAME을 각각 추가해준다. (저의 경우 두 건)
CNAME 추가 후 설정 적용
을 눌러 배포시켜주면 몇 분 지나지 않아 Certificate Manager
쪽에 등록한 인증서가 🟢정상
으로 바뀐 것을 볼 수 있다.
kubectl apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/main/docs/install/pub/install.yaml
먼저 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
Ingress 설정에서 중요한 것은 아래 annotations들을 추가해주는 것이다.
alb.ingress.kubernetes.io/ssl-certificate-no: "23925"
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
ssl-certificate-no
는 Certificate 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
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 선택
nginx.justnewnew.store
)으로 접속해보면 SSL 인증서가 적용되어 HTTPS로 접속이 잘 되는 것을 확인할 수 있다.
안녕하세요! 좋은 자료에 우선 무한 감사드립니다.
해당 글 보고 실습 중인데
모든 설정이 끝나고,
7. 웹서버 접속 후 HTTPS 통신이 적용 확인이 안되어 문의 드립니다.
제가 등록한 주소로 접속하면 "이 사이트는 보안 연결(HTTPS)이 사용되지 않았습니다."라고 나옵니다.
다른 궁금한 사항은
5. 서비스 배포 및 Ingress에 SSL 적용 -> 1. Deployment, Service 배포 -> nginx_deployment_service.yaml 에서 Service가 NodePort로 설정이 맞는지 문의 드립니다.
제가 아직 부족하여 질문 수준이 낮아도 이해 부탁드립니다.
감사합니다.