본문 바로가기

Develop/DevOps

[DevOps] 인증서 관련해서 내용 정리

반응형

  • DNS 사이트 설정 및 등록
    • 외부에서 나의 서버를 DNS 주소로 접속할수있게끔 도와주는 사이트
    • DNS주소를 유료로 구매해야함
    • 예시 사이트
  • SSL 인증서 발급
  • 인증서 발급을 도와주는 툴
  • k8s환경에서의 인증서 관리 툴. ingress-controller는 nginx-ingress가 설치 된 환경
    • 예시: https://cert-manager.io/ (인증서 발급 및 인증서 갱신 자동화)
    • cert-manager의 구성 방식은 아래와같음. Issuer, certificate는 cert-manager를 설치하면 같이 설치되는 CR(Custom Resource)
      • clusterIssuer 또는 Issuer 리소스 생성
        • letsencrypt와 cloudflare 연결 설정 진행
      • certificate 리소스 생성
# Terraform 예시
# Issuer 생성
resource "kubernetes_manifest" "issuer_letsencrypt" {
  manifest = {
    apiVersion = "cert-manager.io/v1"
    kind       = "Issuer"
    metadata = {
      name      = "letsencrypt"
      namespace = kubernetes_namespace.nginx_ingress.metadata[0].name
    }
    spec = {
      acme = {
        server = "https://acme-v02.api.letsencrypt.org/directory"
        email  = ""
        privateKeySecretRef = {
          name = "letsencrypt-issuer"
        }
        solvers = [
          {
            dns01 = {
              cloudflare = {
                email = ""
                apiTokenSecretRef = {
                  # cloudflare에서 제공된 api key가 담긴 secret 리소스 생성 필요
                }
              }
            }
          }
        ]
      }
    }
  }
}

# certificate 생성
resource "kubernetes_manifest" "certificate_tls" {
  manifest = {
    apiVersion = "cert-manager.io/v1"
    kind       = "Certificate"
    metadata = {
      name      = "" # tls 이름 지정
      namespace = kubernetes_namespace.nginx_ingress.metadata[0].name
    }
    spec = {
      secretName = "" # tls 정보가 저장될 secret 리소스 이름 저장
      issuerRef = {
        kind = "Issuer"
        name = kubernetes_manifest.issuer_letsencrypt.manifest.metadata.name
      }
      dnsNames = [
      	# DNS 주소 정보 등록
      ]
      duration    = "2160h" # 90d (tls 인증서 유효기간, 기본값)
      renewBefore = "360h"  # 15d (tls 유효기간까지의 갱신 시점, 기본값)
    }
  }
}

 

 

반응형