Secret 생성하기 with 인증서 & 키 파일

Print

Overview

인증서 & 키 파일을 사용해서 시크릿(Secret)을 만들고, 이를 ingress에 적용하는 방법을 소개합니다.

시크릿(Secret) 소개

시크릿(Secret)은 암호, 토큰 또는 키와 같은 소량의 중요한 데이터를 포함하는 오브젝트 입니다. 이를 사용하지 않으면 중요한 정보가 파드 명세나 컨테이너 이미지에 포함될 수 있습니다.

시크릿은 컨피그맵과 유사하지만 특별히 기밀 데이터를 보관하기 위한 것입니다.

시크릿 타입

시크릿을 생성할 때, Secret 리소스의 type 필드를 사용하거나, (활용 가능하다면) kubectl 의 유사한 특정 커맨드라인 플래그를 사용하여 시크릿의 타입을 명시할 수 있습니다. 시크릿 타입은 시크릿 데이터의 프로그래믹 처리를 촉진시키기 위해 사용됩니다.

해당 가이드에서는 빌트인 타입인 kubernetes.io/tls 타입의 TLS 시크릿을 생성하는 법을 다룹니다.

TLS 시크릿

쿠버네티스는 보통 TLS를 위해 사용되는 인증서와 관련된 키를 저장하기 위해서 빌트인 시크릿 타입 kubernetes.io/tls 를 제공합니다. 이 데이터는 인그레스 리소스의 TLS 종료에 주로 사용되지만, 다른 리소스나 워크로드에 의해 직접적으로 사용될 수도 있습니다. 이 타입의 시크릿을 사용할 때는 tls.key 와 tls.crt 키가 시크릿 구성의 data (또는 stringData) 필드에서 제공되어야 합니다. 그러나, API 서버가 각 키에 대한 값이 유효한지 실제로 검증하지는 않습니다.

다음 YAML은 TLS 시크릿을 위한 구성 예시를 포함합니다.

apiVersion: v1
kind: Secret
metadata:
  name: secret-tls
type: kubernetes.io/tls
data:
  # 본 예시를 위해 축약된 데이터임
  tls.crt: |
        MIIC2DCCAcCgAwIBAgIBATANBgkqh ...
  tls.key: |
        MIIEpgIBAAKCAQEA7yn3bRHQ5FHMQ ...

TLS 시크릿 타입은 사용자 편의만을 위해서 제공됩니다. 사용자는 TLS 서버 및/또는 클라이언트를 위해 사용되는 자격 증명을 위한 Opaque 를 생성할 수도 있습니다. 그러나, 빌트인 시크릿 타입을 사용하는 것은 사용자의 자격 증명들의 포맷을 통합하는 데 도움이 되고, API 서버는 요구되는 키가 시크릿 구성에서 제공되고 있는지 검증도 합니다.

TLS 시크릿 생성

먼저, 인증서와 키 파일을 준비합니다.

키 파일 패스워드 제거

키 파일에 패스워드 설정이 되어있을 경우, 시크릿 생성에 실패할 수 있습니다.

다음 과정을 통해 키파일의 패스워드를 제거합니다.

  1. 파일 복사

$ sudo cp path/to/cert/certfile.pem .
$ sudo cp path/to/key/keyfile.pem .

2. 소유자 변경

$ sudo chown 소유자 keyfile.pem

3. 패스워드 제거

$ cp keyfile.pem keyfile.pem.enc
$ openssl rsa -in keyfile.pem.enc -out keyfile.pem

kubectl를 사용하여 TLS시크릿 생성

--cert 를 위한 공개 키 인증서는 .PEM 으로 인코딩(Base64로 인코딩된 DER 포맷)되어야 하며, --key 를 위해 주어진 개인 키에 맞아야 합니다. 개인 키는 일반적으로 PEM 개인 키 포맷이라고 하는, 암호화되지 않은 형태(unencrypted)이어야 합니다. 두 가지 방식 모두에 대해서, PEM의 시작과 끝 라인(예를 들면, 인증서의 --------BEGIN CERTIFICATE----- 및 -------END CERTIFICATE----) 은 포함되면 안됩니다.

kubectl을 사용하여 TLS 시크릿을 생성합니다.

$ sudo kubectl create secret tls my-tls-secret \
  --cert=path/to/cert/certfile.pem \
  --key=path/to/key/keyfile.pem

Modernization Platform Console 에서 TLS시크릿 생성

시크릿을 생성할 프로젝트의 Deployment Groups에서 Resources 탭으로 이동합니다.

Resources 화면의 왼쪽 메뉴에서 cluster를 선택하고 cluster의 하위 메뉴 중 Secrets 메뉴를 선택합니다.

Secret을 생성할 수 있는 화면과 cluster에 등록되어 있는 Secret 목록이 조회됩니다.

다음과 같이 항목을 작성해 새 시크릿 파일을 생성해줍니다.

  • Name: Secret 명을 입력해줍니다.

  • Type: kubernetes.io/tls 타입을 선택해줍니다.

  • Certificate File: 인증서 파일을 선택해줍니다.

  • Key File: 키 파일을 선택해줍니다.

작성 후 Save 버튼을 클릭하면 Secret이 생성되고 화면의 하단 목록에 다음과 같이 자동으로 추가됩니다.

생성된 Secret resource를 cluster에 배포하기 위해 화면 상단의 Deploy 버튼을 클릭합니다.

생성한 시크릿을 Ingress에 적용하기

다음 YAML은 TLS시크릿을 적용한 ingress 구성 예시입니다.

# my-tls-ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-tls-ingress
  namespace: test-namespace
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: "nginx"
spec:
  tls:
    - hosts:
        - test.demo.cloudzcp.com
      secretName: my-tls-secret
  rules:
    - host: test.demo.cloudzcp.com
      http:
        paths:
          - path: /test
            pathType: Prefix
            backend:
              service:
                name: test-service
                port: 
                  number: 80

TLS항목에서 앞서 생성한 TLS시크릿의 이름을 설정해줍니다.

이후 TLS시크릿이 적용 된 ingress를 재배포해줍니다.

이 답변이 유용합니까? 아니오

Send feedback
도움이 되어드리지 못해 죄송합니다. 아티클 개선을 위해 의견을 제공해 주시기 바랍니다.