쿠버네티스 Ingress에 SSL 인증서 적용하는 방법
프로그램을 네트워크 상에 배포한 후 도메인을 통해 접속하려 할 때, 주소창 앞에 주의 요함 표시나 아래와 같은 메시지가 뜨면서 홈페이지에 접속되지 않는 문제가 발생하는 경우가 있습니다.
특정 웹사이트에 접근할 때 사용되는 HTTPS 프로토콜을 사용하기 위해서는 합법적인 인증 기관에서 발급한 SSL 인증서가 적용되어 있어야 하는데, 이때 사용되는 인증서가 유효하지 않거나 인증서가 누락된 경우에 위 문제가 발생할 수 있습니다.
여기서 SSL 인증서는 클라이언트(예: 크롬)와 웹 서버 간 통신을 할 때 사용됩니다. 서버는 클라이언트에게 인증서를 전달하고 클라이언트는 이를 통해 서버가 신뢰할 수 있는지를 판단합니다.
위와같은 문제를 해결하기 위해서는 SSL 인증서를 도메인에 맞게 적용해야 합니다.
인증서 종류는 아래와 같습니다.
1. 단일 인증서 (Single Domain SSL) - 한 가지 도메인에 대해서 인증 (ex . www.naver.com)
2. 와일드카드 인증서 (WildCard SSL) - 하나의 인증서로 서브도메인 인증(www.sub.naver.com)
3. 멀티도메인 인증서 (Multi-Domain SSL) - 하나의 인증서로 여로개의 도메인 등록가능(도메인 제한 존재)
필요한 인증서의 종류를 선택한 뒤 발급사이트에서 인증서를 발급받으면 몇 가지 파일을 받게 됩니다.
이 중에서도 ROOT(CA) 파일, Chain 파일, Key 파일, 인증서 파일을 사용하여 작업합니다.
인증서/ Secret 생성 및 적용방법
먼저 디지털 인증서 파일을 편집기를 통해 열고 Chain 파일, ROOT 파일을 추가한 뒤 합쳐진 파일을 저장합니다.
파일을 저장한 후 Ingress에 적용해야하는데 이때 시크릿이라는 것을 생성해야 합니다.
kubectl create secret tls 시크릿 이름 --key 키파일이름.key --cert 위에서만든 병합한 파일이름
쿠버네티스 서버에 위에서 생성한 인증서 파일을 저장한 뒤 위 명령어를 사용하여 시크릿을 생성합니다.
kubectl describe secret 시크릿 이름
생성을 했다면 명령어를 통해 시크릿을 활성화시켜 줍니다.
kubectl --kubeconfig=%KUBE_CONFIG% get secret
시크릿이 정상적으로 만들어졌는지는 위 명령어로 확인합니다.
spec:
tls:
- hosts:
- SSL인증서를 적용하시려는 도메인(ex www.naver.com)
secretName: 아까 생성한 시크릿 명(ex test-secret)
정상적으로 시크릿이 만들어졌다면 적용하고자 하는 ingress의 Yaml 파일을 오픈하신 뒤 spec 항목 하위에 tls 항목을 추가합니다.
위와 같이 tls를 적용한 후 잠시 기다리면 완료메시지가 출력되며, 해당 도메인으로 접속하여 정상적으로 접속되는지 확인합니다.
Private Key를 사용해야 할 경우
위 와 동일하게 인증서 파일을 합친 뒤 시크릿을 생성하려고 할 때
error: tls: private key does not match public key와 같은 에러메시지가 출력될 때가 있습니다.
해당 에러는 인증서 key의 비밀번호 정보가 필요합니다.
인증서 발급 업체에서 인증서 파일과 함께 전달받은 private key 파일 및 비밀번호 정보를 확인해 주세요.
필요한 데이터를 확보한 후 작업을 수행하는 PC에 OpenSSL을 설치한 후 아래와 같은 명령어를 사용하여 private key 파일을 복호화합니다.
openssl rsa -in prv_전달받은키파일.key -out 복호화된키파일이름.key
위 명령어를 수행하면 비밀번호를 입력하라는 메시지가 출력되고, 전달받은 비밀번호를 입력하게 되면
복호화된 키파일이름. key 파일이 생성됩니다.
이제 해당 파일을 사용하여 위쪽 내용과 동일하게 시크릿을 생성하신 뒤에 ingress에 적용하시면 됩니다.