Kubernetes Ingress SSL 인증서 적용 (한국전자인증)

2021. 12. 20. 15:54Dev

Kubernetes Ingress 로 웹 어플리케이션을 서비스할 경우 https 통신을 위해 SSL 인증서를 Ingress 에 적용해본다. 나같은 경우는 SSL 인증서를 한국전자인증 (https://www.crosscert.com/) 을 통해 발급받았고, 여러분도 여기에서 발급받았다는 가정 하에 설명한다. 아마 다른 곳에서 인증서를 받아도 크게 다르지 않을 것이다.

 

한국전자인증 – 공동인증서발급, (구)공인인증서발급 생체인증 클라우드 전자서명 SSL인증서

범용공동인증서 발급, (구)공인인증서 나라장터입찰, FIDO, 클라우드사인, 기기인증, SSL 보안서버, 시만텍 디지서트 인증서, 전자세금계산서, PKI전자서명

www.crosscert.com

 

인증서를 발급받으면 크게 3개의 파일이 담겨있다.

  • DigiCertCA.pem
  • cert.pem
  • key.pem

여기서 Ingress 에 인증서를 적용하기 위해서는 인증서 (cert.pem) 과 비밀키 (key.pem) 두 개가 필요하다.

 

 

비밀키의 비밀번호 해제

 

key.pem 으로 바로 Secret 을 생성하려고 하면 오류가 난다. key.pem 자체가 암호화 되어있는 경우인데 이럴 경우 SSL 인증서 발급시 비밀번호로 풀어주면 된다.

openssl rsa -in key.pem -out key.unencrypted.pem -passin pass:<발급당시 비밀번호>

 

Secret 생성

itspjc-tls 라는 이름의 secret 을 생성해준다. 이 때, 암호가 풀린 key.unencrypted.pem 을 사용한다. 

kubectl create secret tls itspjc-tls --cert cert.pem --key key.unencrypted.pem

 

Ingress 에 적용

인증서의 도메인이 itspjc.co.kr 이라고 가정하면 아래와 같이 ingress의 YAML 파일을 수정하여 적용해주면 된다.

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: itspjc-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: itspjc.co.kr
    http:
      paths:
      - path: /
        backend:
          serviceName: itspjc-frontend-svc
          servicePort: 80
      - path: /api
        backend:
          serviceName: itspjc-backend-svc
          servicePort: 80

  tls:
  - hosts:
    - itspjc.co.kr
    secretName: itspjc-tls

 

마치며

이게 끝이다. 이제 브라우저를 통해 https 인증서가 적용되었는지 확인해보면 된다. Kubernetes Ingress만 잘 구성되어 있다면 인증서를 적용하는 방법은 이렇게 쉽다.