[Network] SSL 인증서 적용 & K8S 클러스터 Ingress-nginx 활용
전 게시글을 보시면 HTTPS를 사용해야 하는 이유와 SSL 인증서를 다운로드 받고, Key 파일에 대해서 설명을 드렸습니다.
이 키를 사용하여, 인증서를 생성하기 위해 K8S 환경을 만들어놓은 master 계정으로 접속 했습니다.
key파일을 옮기기 위해서 FileZilla를 사용하게 되었는데, 이 프로그램을 사용하여 C드라이브에 있는 파일을 K8S 환경으로 옮기는 작업을 진행 했습니다.
물론 내부에서도 가능하지만, 프로그램을 사용하면 손 쉽게 가능하기에 전 아래와 같은 방법을 선택 했습니다.
https://filezilla-project.org/
위에서 다운로드 받으시면 됩니다.
이제 옮기셨으면, 아래를 따라해주세요 !
1. 인증서 파일을 준비한다.
위에 앞서 말 했던 것 처럼 key 파일을 옮긴 폴더 안으로 가시면,
인증서 파일은
certificate.crt, ca_bundle.crt, private.key로 존재합니다. 이 3가지 파일이 준비되어 있어야 합니다!
2. 인증서 파일을 병합한다.
cat certificate.crt ca_bundle.crt > fullchain.crt
이 명령어는 서버 인증서와 CA 번들을 하나의 파일인 fullchain.crt로 병합하는 것이다. 이는 SSL 인증서를 제대로 검증하기 위해서 필요하고, fullchain.crt 파일은 클라이언트가 서버의 SSL 인증서를 신뢰할 수 있도록 모든 필요한 중간 인증서를 포함합니다.
3. Secret 생성
kubectl create secret tls tls-secret --cert=fullchain.crt --key=private.key -n default
default 네임 스페이스에 tls-secret 라는 이름의 TLS Secret를 생성합니다.
4. Ingress 리소스 설정 확인
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: calit-ingress
namespace: default
spec:
ingressClassName: "nginx"
tls:
- hosts:
- www.calit.kro.kr
secretName: tls-secret
rules:
- host: www.calit.kro.kr
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend-svc
port:
number: 80
- path: /api
pathType: Prefix
backend:
service:
name: backend-svc
port:
number: 8080
예시를 보여드리겠습니다. 위에 tls 하위에 secretName 에 있는 tls-secret가 제가 생성한 key 파일입니다.
1. ingressClassName: "nginx": ingress-nginx 컨트롤러를 사용하도록 지정합니다.
2. tls: TLS 설정을 정의하며, www.calit.kro.kr 호스트에 대해 tls-secret을 사용하도록 지정합니다.
3. rules: HTTP 및 HTTPS 요청을 해당 서비스로 라우팅합니다.
혹여나 ingress 리소스를 수정했거나, 새로 생성한 경우 Kubernetes 클러스터에 적용 하기 위해서는
kubectl apply -f calit-ingress.yaml
명령어를 통해 적용할 수 있습니다.
이제 브라우저에서 [https:// 도메인 주소] 에 접근하여 SSL 인증서가 올바르게 적용 됐는지 시각적으로 확인 가능합니다.
다들 K8S 환경에서 SSL 인증서를 적용 해 보시고, 안전한 개발하시길 바랍니다 ! 감사합니다 !