시크릿(Secret)

민감한 정보를 저장하기 위한 용도, 네임스페이스에 종속

시크릿 생성 방법

password=1q2w3e4r 라는 키-값을 저장하는 my-password 이름의 시크릿을 생성

vagrant@ubuntu:~$ kubectl create secret generic my-password --from-literal password=1q2w3e4r
secret/my-password created

vagrant@ubuntu:~$ kubectl get secrets
NAME                  TYPE                                  DATA   AGE
default-token-sh8hv   kubernetes.io/service-account-token   3      3d22h ⇐ ServiceAccount에 의해 네임스페이스별로 자동으로 생성된 시크릿
my-password           Opaque                                1      9s

파일로부터 시크릿을 생성

vagrant@ubuntu:~$ echo mypassword > pw1 && echo yourpassword > pw2
vagrant@ubuntu:~$ cat pw1
mypassword
vagrant@ubuntu:~$ cat pw2
yourpassword

vagrant@ubuntu:~$ kubectl create secret generic out-password --from-file pw1 --from-file pw2
secret/out-password created
vagrant@ubuntu:~$ kubectl get secrets
NAME                  TYPE                                  DATA   AGE
default-token-sh8hv   kubernetes.io/service-account-token   3      3d22h
my-password           Opaque                                1      5m29s
out-password          Opaque                                2      51s

시크릿 내용을 확인

vagrant@ubuntu:~$ kubectl describe secret my-password
Name:         my-password
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password:  8 bytes        ⇐ password 키에 해당하는 값을 확인할 수 없음 (값의 크기(길이)만 출력)

vagrant@ubuntu:~$ kubectl get secret my-password -o yaml
apiVersion: v1
data:
  password: MXEydzNlNHI=    ⇐ BASE64로 인코딩
kind: Secret
metadata:
  creationTimestamp: "2020-09-22T04:49:44Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:password: {}
      f:type: {}
    manager: kubectl-create
    operation: Update
    time: "2020-09-22T04:49:44Z"
  name: my-password
  namespace: default
  resourceVersion: "81153"
  selfLink: /api/v1/namespaces/default/secrets/my-password
  uid: e597d8d2-479e-464f-934d-5d2ae7f232c8
type: Opaque

vagrant@ubuntu:~$ echo MXEydzNlNHI= | base64 -d
1q2w3e4r

시크릿에 저장된 키-값 쌍을 파드로 가져오기

시크릿에 저장된 모든 키-값 쌍을 파드의 환경변수로 가져오기

vagrant@ubuntu:~$ vi env-from-secret.yml
apiVersion: v1
kind: Pod
metadata:
  name: secret-env-example
spec:
  containers:
    - name: my-container
      image: busybox
      args: ["tail", "-f", "/dev/null"]
      envFrom:
        - secretRef:
            name: my-password

vagrant@ubuntu:~$ kubectl apply -f env-from-secret.yml
pod/secret-env-example created

vagrant@ubuntu:~$ kubectl exec secret-env-example -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=secret-env-example
password=1q2w3e4r
HOSTNAME_SVC_NODEPORT_SERVICE_PORT_WEB_PORT=8080
HOSTNAME_SVC_NODEPORT_PORT=tcp://10.111.29.91:8080
HOSTNAME_SVC_NODEPORT_PORT_8080_TCP_PORT=8080
KUBERNETES_SERVICE_PORT=443
HOSTNAME_SVC_NODEPORT_SERVICE_PORT=8080
KUBERNETES_PORT_443_TCP_PROTO=tcp
HOSTNAME_SVC_NODEPORT_PORT_8080_TCP_ADDR=10.111.29.91
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
HOSTNAME_SVC_NODEPORT_SERVICE_HOST=10.111.29.91
HOSTNAME_SVC_NODEPORT_PORT_8080_TCP=tcp://10.111.29.91:8080
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_HOST=10.96.0.1
HOSTNAME_SVC_NODEPORT_PORT_8080_TCP_PROTO=tcp
HOME=/root

 

반응형

+ Recent posts