# default 시크릿 확인
kubectl get secrets
root@manager:~# kubectl get secrets
NAME TYPE DATA AGE
default-token-48ksg kubernetes.io/service-account-token 3 11d
# my-password 이름의 시크릿을 생성하며, password=1q2w3e4r 이라는 키-값 쌍을 저장합니다, 기본 generic 는 Opaque 타입!
kubectl create secret generic my-password --from-literal password=1q2w3e4r
# 시크릿 확인 : 'kubernetes.io/service-account-token' 는 ServiceAccount 에 의해 네임스페이스 별로 자동 생성된 시크릿입니다
kubectl get secrets
NAME TYPE DATA AGE
default-token-qnl5g kubernetes.io/service-account-token 3 161m
my-password Opaque 1 40m
# my-password 시크릿 확인
kubectl describe secrets my-password
Name: my-password
...
Data
====
password: 8 bytes
kubectl get secrets my-password -o yaml
apiVersion: v1
data:
password: MXEydzNlNHI=
kind: Secret
...
kubectl get secrets my-password -o jsonpath='{.data.password}' ; echo
MXEydzNlNHI=
# 시크릿에 값을 저장할 때, 쿠버네티스가 기본적으로 base64로 인코딩
echo MXEydzNlNHI= |base64 -d ;echo
1q2w3e4r
kubectl get secrets my-password -o jsonpath='{.data.password}' | base64 -d ; echo
1q2w3e4r
# 생성
curl -s -O https://raw.githubusercontent.com/gasida/DKOS/main/3/secret-pod.yaml
kubectl apply -f secret-pod.yaml
# 확인
kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
secret-pod 1/1 Running 0 41m 172.16.228.66 k8s-w1 <none> <none>
# 워커노드에 대한 권한이 있는 사람일 경우 해당 파드(컨테이너)에 secret 정보를 확인 할 수 있다!
# 호스트(워커노드)에서 tail 실행 프로세스 정보 확인
ps -ef | head -1 ; ps -ef | grep tail | grep -v auto
root@k8s-w1:~# ps -ef | head -1 ; ps -ef | grep tail | grep -v auto
UID PID PPID C STIME TTY TIME CMD
root 115533 115509 0 06:25 ? 00:00:00 tail -f /dev/null
root@k8s-w1:~# ps -ef | grep tail | grep -v auto | awk '{print $2}'
115533
# /proc/<PID> 디렉터리 정보 확인 : environ 파일!
tree -L 1 /proc/`ps -ef | grep tail | grep -v auto | awk '{print $2}'`
root@k8s-w1:~# tree -L 1 /proc/`ps -ef | grep tail | grep -v auto | awk '{print $2}'`
/proc/115533
├── arch_status
├── attr
├── autogroup
├── auxv
├── cgroup
├── clear_refs
├── cmdline
├── comm
├── coredump_filter
├── cpuset
├── cwd -> /
├── environ
...
# /proc/<PID>/environ 에 시크릿 정보가 그대로 노출되어 있다!
cat /proc/`ps -ef | grep tail | grep -v auto | awk '{print $2}'`/environ
root@k8s-w1:~# cat /proc/`ps -ef | grep tail | grep -v auto | awk '{print $2}'`/environ
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME=secret-podpassword=1q2w3e4rKUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443KUBERNETES_PORT_443_TCP_PROTO=tcpKUBERNETES_PORT_443_TCP_PORT=443KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1KUBERNETES_SERVICE_HOST=10.96.0.1KUBERNETES_SERVICE_PORT=443KUBERNETES_SERVICE_PORT_HTTPS=443KUBERNETES_PORT=tcp://10.96.0.1:443HOME=/rootroot@k8s-w1:~#
# 다음 실습을 위해서 생성된 자원 삭제
kubectl delete pod --all && kubectl delete secret my-password