클라우드/쿠버네티스(Kubernetes)

쿠버네티스 Kubernetes 애플리케이션 사용자화 6 / 시크릿(Secret)을 이용한 사용자화 1

두뚜 2021. 7. 14. 00:55

# 시크릿을 이용한 사용자화

컨피그맵과 같은 키/값 저장소 , 소량의 민감한 데이터를 저장하고 안전하게 제공될 수 있도록 만들어 졌다

또한 값을 BASE64로 인코딩해 데이터 저장하고  인코딩된 경우 별도의 절차 없이 디코딩하여 제공

 

인코딩 : 데이터를 다른 형태의 코드로 바꾸는 것 , 시크릿에서는 데이터를 잘 알아보지 못하도록 인코딩한다 (암호화는 아님)

https://www.base64encode.org/

 

Base64 Encode and Decode - Online

Encode to Base64 format or decode from it with various advanced options. Our site has an easy to use online tool to convert your data.

www.base64encode.org

 

 

# 시크릿 정의 및 확인

# 시크릿 저장 데이터 종류

1) 직접 시크릿에 저장 할 수 있는 데이터의 종류

- generic: (기본) 키/값 형식의 임의 데이터

- docker-registry : 도커 저장소 인증 정보  (private image 를 받아올때 사용하는 아이디 패스워드 저장용)

- tls : TLS 키 및 인증서

 

2) 직접 시크릿에 저장 할 수 없는 시크릿 저장 데이터 종류

--> service-account-token : 서비스 계정 토큰

 

# kubectl get secretes에 표시되는 데이터의 종류

- Opaque (=generic)  임의 데이터

- kubernetes.io/dockerconfigjson

- kubernetes.io/tls

- kubernetes.io/service-account-token

 

 

 

# 시크릿 생성 사용법

시크릿을 직접 명령으로 생성 할때는 저장할 데이터의 종류를 선언

https://kubernetes.io/docs/concepts/configuration/secret/

 

Secrets

Kubernetes Secrets let you store and manage sensitive information, such as passwords, OAuth tokens, and ssh keys. Storing confidential information in a Secret is safer and more flexible than putting it verbatim in a Pod definition or in a container image.

kubernetes.io

 

# 일반 시크릿 생성, 확인

key1: 6 byte ( 영문자 한개  = 1바이트 )

kubectl describe 명령에서는 데이터가 직접 표시되지 않고 크기만 표시된다

 

 

# 저장된 리소스를 YAML 형식으로 확인

key1: dmFsdWUx ( 인코딩된 value값 )

 

 

# 디코딩

 

 

# 오브젝트 파일을 이용한 시크릿 정의

YAML 형식의 오브젝트를 이용한 시크릿 정의

더보기

apiVersion: v1
kind: Secret
metadata:
  name: user-pass-yaml
type: Oqaque
data:
  username: YWRtaW4K
  password: UEBzc3cwcmQK

YAML 파일을 이용해 데이터를 저장할 때는 직접 Base64로 인코딩 된 데이터를 정의한다. 평문으로 정의해서 리소스를 생성하면 오류를 보고한다.

 

 

# 시크릿을 이용한 Nginx HTTPS 웹 서비스 제공

시크릿에 TLS 키 인증서를 저장하고 파드에 제공해 HTTPS를 제공하는 웹 서비스 구성

자체 서명 인증서 -  3자를 거치지 않아서  보안 오류가 뜬다

 

 

# TLS 키 및 인증서 생성

 

# 키를 저장하기 위해 nginx-tls 디렉터리 생성

# HTTPS를 위한 TLS 키를 생성

# TLS 키를 이용하여 TLS 인증서 생성

더보기

vagrant@k-control:~$ mkdir nginx-tls


vagrant@k-control:~$ openssl genrsa -out nginx-tls/nginx-tls.key 2048


vagrant@k-control:~$ openssl req -new -x509 -key nginx-tls/nginx-tls.key \
                     -out ngonx-tls/nginx-tls.crt \
                     -days 3650 -subj /CN=myapp.example.com

 

# 시크릿 생성

TLS 인증서와 키를 저장하기 위한 시크릿 생성

 

​#  TLS 설정을 위한 Nginx 설정파일 및 컨피그 맵 생성

 

# conf 디렉터리를 생성하고 설정파일 저장

설정파일은 굳이 시크릿으로 하지 않음 ( 컨피그 맵으로 충분히 가능 )

 

# TLS가 설정된 Nginx 설정파일을 컨피그 맵 으로 생성

 

# 생성한 컨피그 맵의 자세한 정보 확인

 

# 시크릿 컨피그 맵을 사용하는 파드 생성

TLS가 적용 된 Nginx 파드를 실행하기 위한 파드 오브젝트

설정 파일이 있는 컨피그 맵과 TLS 인증서 및 키가 있는 시크릿을 볼륨으로 지정

# nginx-tls-config 컨피그 맵 = nginx-tls-config 볼륨

# nginx-tls-secret 시크릿 = https-cert 볼륨

# nginx-tls-config 볼륨  = /etc/nginx/conf.d 디렉터리에 마운트

# https-cert 볼륨 = 컨테이너 /etc/nginx/ssl 디렉터리에 마운트 (읽기 전용)

 

 

#  파드 생성

 

# HTTPS 웹 서비스 확인

제 3 자 인증을 하지 않아서 에러가 난다

 

 

#  자체 서명 인증서이기 때문에 옵션을 사용

-k  자체 서명 인증서 확인 옵션