Cloud/Kubernetes

쿠버네티스 Ingress에 SSL 인증서 적용하는 방법

하나의묵 2024. 3. 8. 18:40

 

프로그램을 네트워크 상에 배포한 후 도메인을 통해 접속하려 할 때, 주소창 앞에 주의 요함 표시나 아래와 같은 메시지가 뜨면서 홈페이지에 접속되지 않는 문제가 발생하는 경우가 있습니다.

 

문제 이미지

 

특정 웹사이트에 접근할 때 사용되는 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에 적용하시면 됩니다.