Secret이란?
- Container가 사용하는 password, auth token, ssh key와 같은 중요한 정보를 저장
- 민감한 구성 정보를 base64로 인코딩해서 한 곳에 모아서 관리
- Secret 데이터 전달 방법
- Command-line Argument
- Environment Variable
- Volume Mount
- Available command에 따라 들어가는 옵션이 달라짐
- docker-registry : create a secret for use with a Docker registry
- generic : create a secret from a local file, directory or literal value
- tls : create a TLS secret
- type
- Opaque : 임의의 사용자 정의 데이터
- kubernetes.io/service-account-token : service account token
- kubernetes.io/dockercfg : 직렬화 된(serialized) ~/.dockercfg 파일
- kubernetes.io/dockerconfigjson : 직렬화된 ~/.docker/config.json 파일
- kubernetes.io/basic-auth : 기본 인증을 위한 자격 증명 (credential)
- kubernetes.io/ssh-auth : SSH를 위한 자격 증명
- kubernetes.io/tls : TLS 클라이언트나 서버를 위한 데이터
- bootstrap.kubernetes.io/token : bootstrap token data
- Secret etcd에 암호화 하지 않은 텍스트로 저장되므로 secret value가 커지면 메모리 용량을 많이 사용하게 됨
- Secret의 최대 크기는 1MB
<이미지 출처 : [따배쿠] 11. Kubernetes Secret >
Secret 생성
- secret으로 보관할 nginx config 파일 생성
vi nginx-config.conf
server {
listen 80;
server_name www.example.com;
gzip on;
gzip_types text/plain application/xml;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
- secret 생성
kubectl create secret generic ttabae-secret --from-literal=INTERVAL=2 --from-file=./genid-web-config/
- secret 확인
kubectl get secrets
NAME TYPE DATA AGE
default-token-qhsqj kubernetes.io/service-account-token 3 58m
ttabae-secret Opaque 2 43m
kubectl describe secrets ttabae-secret
Name: ttabae-secret
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
INTERVAL: 1 bytes
nginx-config.conf: 218 bytes
kubectl get secret ttabae-secret -o yaml
apiVersion: v1
data:
INTERVAL: Mg==
nginx-config.conf: c2VydmVyIHsKICAgIGxpc3RlbiAgIDgwOwogICAgc2VydmVyX25hbWUgIHd3dy5leGFtcGxlLmNvbTsKCiAgICBnemlwIG9uOwogICAgZ3ppcF90eXBlcyB0ZXh0L3BsYWluIGFwcGxpY2F0aW9uL3htbDsKCiAgICBsb2NhdGlvbiAvIHsKICAgICAgICByb290ICAgL3Vzci9zaGFyZS9uZ2lueC9odG1sOwogICAgICAgIGluZGV4ICBpbmRleC5odG1sIGluZGV4Lmh0bTsKICAgIH0KfQo=
kind: Secret
metadata:
creationTimestamp: "2022-06-14T04:58:00Z"
name: ttabae-secret
namespace: default
resourceVersion: "4854"
uid: 52bfcec0-0d2a-431e-9edc-246bd2f1445d
type: Opaque
Secret 사용
- secret을 사용할 pod 생성
cat genid-env-secret.yaml
apiVersion: v1
kind: Pod
metadata:
name: genid-env-secret
spec:
containers:
- image: smlinux/genid:env
env:
- name: INTERVAL
valueFrom:
secretKeyRef:
name: ttabae-secret
key: INTERVAL
name: fakeid-generator
volumeMounts:
- name: html
mountPath: /webdata
- image: nginx:1.14
name: web-server
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
readOnly: true
ports:
- containerPort: 80
volumes:
- name: html
emptyDir: {}
kubectl create -f genid-env-secret.yaml
curl 192.168.178.193
+--------------------+
| Gilda Doyle |
| 726 New First Rd |
| Raleigh, NC 27611 |
| (919) xxx-xxxx |
+--------------------+
- secret을 volume으로 선언한 pod 생성 및 확인
vi genid-volume-secret.yaml
apiVersion: v1
kind: Pod
metadata:
name: genid-volume-secret
spec:
containers:
- image: smlinux/genid:env
env:
- name: INTERVAL
valueFrom:
secretKeyRef:
name: ttabae-secret
key: INTERVAL
name: fakeid-generator
volumeMounts:
- name: html
mountPath: /webdata
- image: nginx:1.14
name: web-server
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
readOnly: true
- name: config
mountPath: /etc/nginx/conf.d
readOnly: true
ports:
- containerPort: 80
volumes:
- name: html
emptyDir: {}
- name: config
secret:
secretName: ttabae-secret
items:
- key: nginx-config.conf
path: nginx-config.conf
kubectl create -f genid-volume-secret.yaml
kubectl get pods
NAME READY STATUS RESTARTS AGE
genid-env-secret 2/2 Running 0 7m13s
genid-volume-secret 2/2 Running 0 23s
- base64로 인코딩 된 정보를 application에서는 디코딩 하여 사용하는 것을 확인
kubectl exec -it genid-volume-secret -c web-server -- /bin/bash
cat /etc/nginx/conf.d/nginx-config.conf
server {
listen 80;
server_name www.example.com;
gzip on;
gzip_types text/plain application/xml;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
df -h
Filesystem Size Used Avail Use% Mounted on
overlay 29G 4.2G 25G 15% /
tmpfs 64M 0 64M 0% /dev
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/root 29G 4.2G 25G 15% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 7.7G 4.0K 7.7G 1% /etc/nginx/conf.d //마운트 확인 가능
tmpfs 7.7G 12K 7.7G 1% /run/secrets/kubernetes.io/serviceaccount
tmpfs 3.9G 0 3.9G 0% /proc/acpi
tmpfs 3.9G 0 3.9G 0% /proc/scsi
tmpfs 3.9G 0 3.9G 0% /sys/firmware
ls -l /etc/nginx/conf.d/
total 0
lrwxrwxrwx 1 root root 24 Jun 14 06:46 nginx-config.conf -> ..data/nginx-config.conf
'INFRA > DevOps' 카테고리의 다른 글
[k8s] Pod Scheduling (1) | 2023.02.06 |
---|---|
[K8s] Multi-master - HA Kuberenetes cluster 운영 (0) | 2023.01.30 |
[K8s] ConfigMap (0) | 2023.01.16 |
[k8s] Canary Deployment (0) | 2023.01.09 |
[K8s] Annotation (0) | 2023.01.03 |
댓글