반응형
Kubernetes Secret은 ConfigMap과 유사하게 어떠한 정보를 담고 있지만, 다음과 같은 차이점이 있다. :
- Secret은 API 키, ID/Password, 인증서 등 기밀 정보를 다룬다.
- 따라서 etcd 안에서 암호화된 상태로 관리된다
- Manifest 파일 작성시 key의 value는 base64 인코딩한 값을 입력해야 한다.
Secret 생성하기
인증서 같은 기밀 정보 파일을 Secret으로 생성
###
# Secret 생성
# - ConfigMap 처럼 --from-env-file, --from-literal 존재
###
$ kubectl create secret generic {Secret 이름} --from-file={key}={value}
###
# 사용 예시
###
$ kubectl create secret generic my-publickey --from-file=publickey=/Users/jhyunto/.ssh/id_rsa.pub
API 키와 같은 Key-Value 형태의 기밀 정보를 Secret으로 생성
###
# base64 인코딩
###
$ echo "hyunto" | base64
aHl1bnRvCg==
$ echo "jhyunto@gmail.com" | base64
amh5dW50b0BnbWFpbC5jb20K
###
# Secret Manifest 파일 (secret.yml)
###
apiVersion: v1
kind: Secret
metadata:
name: my-info
type: Opaque
data:
name: aHl1bnRvCg==
email: amh5dW50b0BnbWFpbC5jb20K
###
# Secret 생성
###
$ kubectl create -f ./secret.yml
Secret 사용
환경변수로 사용하기
###
# 적용 예시
###
spec:
template:
spec:
containers:
...<생략>...
env:
- name: {환경변수 이름}
valueFrom:
secretKeyRef:
name: {Secret 이름}
key: {Secret Manifest에서 data 필드에 입력한 Key}
###
# 사용 예시
###
containers:
...<생략>...
env:
- name: MY_NAME
valueFrom:
secretKeyRef:
name: my-info
key: name
###
# 적용 확인
###
root@secret-test-559468658c-t6cjg:/# env | grep MY_NAME
MY_NAME=hyunto
볼륨 마운트하여 사용하기
###
# 적용 예시
###
spec:
template:
spec:
containers:
...<생략>...
volumeMounts:
- name: {볼륨 이름}
mountPath: {마운트 경로}
readOnly: true
volumes:
- name: {볼륨 이름}
secret:
secretName: {Secret 이름}
###
# 사용 예시
###
containers:
...<생략>...
volumeMounts:
- name: my-publickey-volume
mountPath: /etc/secrets
readOnly: true
volumes:
- name: my-publickey-volume
secret:
secretName: my-publickey
###
# 적용 확인
###
root@secret-test-559468658c-t6cjg:/# ls -l /etc/secrets/
total 0
lrwxrwxrwx 1 root root 16 Nov 26 17:06 publickey -> ..data/publickey
실습에 사용한 Deployment.yml 파일
apiVersion: apps/v1
kind: Deployment
metadata:
name: secret-test
spec:
selector:
matchLabels:
app: secret-test
template:
metadata:
labels:
app: secret-test
spec:
containers:
- name: nginx
image: nginx
resources:
limits:
memory: "1Gi"
cpu: "500m"
ports:
- containerPort: 80
env:
- name: MY_NAME
valueFrom:
secretKeyRef:
name: my-info
key: name
volumeMounts:
- name: my-publickey-volume
mountPath: /etc/secrets
readOnly: true
volumes:
- name: my-publickey-volume
secret:
secretName: my-publickey
반응형
'IT 인프라 > DevOps' 카테고리의 다른 글
Kubernetes란 무엇인가? (0) | 2019.12.13 |
---|---|
Kubernetes ConfigMap으로 설정정보 관리하기 (0) | 2019.11.26 |
Docker 이미지 용량을 줄이는 Tip (0) | 2019.11.19 |
나만의 Docker Compose Cheat Sheet (0) | 2019.11.18 |
나만의 Dockerfile Cheat Sheet (0) | 2019.11.18 |