쿠버네티스 Kubernetes 애플리케이션 사용자화 6 / 시크릿(Secret)을 이용한 사용자화 1
# 시크릿을 이용한 사용자화
컨피그맵과 같은 키/값 저장소 , 소량의 민감한 데이터를 저장하고 안전하게 제공될 수 있도록 만들어 졌다
또한 값을 BASE64로 인코딩해 데이터 저장하고 인코딩된 경우 별도의 절차 없이 디코딩하여 제공
인코딩 : 데이터를 다른 형태의 코드로 바꾸는 것 , 시크릿에서는 데이터를 잘 알아보지 못하도록 인코딩한다 (암호화는 아님)
# 시크릿 정의 및 확인
# 시크릿 저장 데이터 종류
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/
# 일반 시크릿 생성, 확인
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 자체 서명 인증서 확인 옵션