ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [따배쿠] Secret
    kubernetes 2024. 12. 25. 10:11

    Secret

    ConfigMap과 Secret은 유사하나, Secret이 더욱 더 민감한 정보를 담고 있다.

    Secret의 값들은 base64로 인코딩 되어있다.

    secret 생성 시, Available Commands를 필수로 넣어줘야한다. ex) docker-registry, generic, TLS

     

     

    실습

     

    순서 : Secret 파일 생성 > Secret 생성 > Secret 사용

     

     

    [nginx-config.conf 파일 생성]

    root@master:~/Getting-Start-Kubernetes/11# vi genid-web-config/nginx-config.conf                                                                                    f
    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 생성]

    root@master:~/Getting-Start-Kubernetes/11# kubectl create secret generic ttabae-secret --from-literal=INTERVAL=2 --from-file=./genid-web-config/
    secret/ttabae-secret created

     

    [Secret 확인]

    root@master:~/Getting-Start-Kubernetes/11# kubectl get secrets
    NAME            TYPE     DATA   AGE
    ttabae-secret   Opaque   2      9s
    root@master:~/Getting-Start-Kubernetes/11# 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
    root@master:~/Getting-Start-Kubernetes/11# kubectl get secrets ttabae-secret -o yaml
    apiVersion: v1
    data:
      INTERVAL: Mg==
      nginx-config.conf: c2VydmVyIHsKICAgIGxpc3RlbiAgIDgwOwogICAgc2VydmVyX25hbWUgIHd3dy5leGFtcGxlLmNvbTsKCiAgICBnemlwIG9uOwogICAgZ3ppcF90eXBlcyB0ZXh0L3BsYWluIGFwcGxpY2F0aW9uL3htbDsKCiAgICBsb2NhdGlvbiAvIHsKICAgICAgICByb290ICAgL3Vzci9zaGFyZS9uZ2lueC9odG1sOwogICAgICAgIGluZGV4ICBpbmRleC5odG1sIGluZGV4Lmh0bTsKICAgIH0KfQo=
    kind: Secret
    metadata:
      creationTimestamp: "2024-12-25T01:16:44Z"
      name: ttabae-secret
      namespace: default
      resourceVersion: "421288"
      uid: 23a7c218-2dbd-47b5-b9db-5d64f3e1afd5
    type: Opaque

     

    Secret의 값은 base64로 인코딩되어 보이지않는다.

    하지만 Pod로 passing 될 때는 디코딩되어 보인다.

     

    Secret 사용하기

    실습 (Secret을 컨테이너 환경변수로 사용)

     

    앞에서 만든 Secret을 활용해보자

     

    [genid-env-secret.yaml 파일 생성]

    root@master:~/Getting-Start-Kubernetes/11# 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: {}

     

    [Pod 생성]

    root@master:~/Getting-Start-Kubernetes/11# kubectl create -f genid-env-secret.yaml
    pod/genid-env-secret created

     

    실습2 (Secret을 컨테이너 Volume Mount로 전달)

     

    [genid-volume-secret.yaml 파일 생성]

    root@master:~/Getting-Start-Kubernetes/11# 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

     

    ttabae-secret이라는 Secret을 Container 내 /etc/nginx/conf.d로 Volume Mount 해서 사용

     

    [Pod 생성]

    root@master:~/Getting-Start-Kubernetes/11# kubectl create -f genid-volume-secret.yaml

     

    [Pod 확인]

    root@master:~/Getting-Start-Kubernetes/11# kubectl get pods
    NAME                  READY   STATUS    RESTARTS   AGE
    genid-env-secret      2/2     Running   0          12m
    genid-volume-secret   2/2     Running   0          4s

     

    [Container 접근 후 확인]

    root@master:~/Getting-Start-Kubernetes/11# kubectl exec -it genid-volume-secret -c web-server -- /bin/bash
    root@genid-volume-secret:/# cd /etc/nginx/conf.d/
    root@genid-volume-secret:/etc/nginx/conf.d# ls
    nginx-config.conf
    root@genid-volume-secret:/etc/nginx/conf.d# cat 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;
        }
    }

     

    nginx-config.conf 파일이 정상적으로 Mount 된 것을 확인 가능하다.

    Secret 생성 시, base64로 인코딩되어 해당 값들이 보이지 않았지만

    해당 Secret을 동작하는 Application(ex. Pod)로 전달하게 되면 디코딩되어 값 확인 가능하다.

     

    root@genid-volume-secret:/etc/nginx/conf.d# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    overlay          29G  7.5G   21G  27% /
    tmpfs            64M     0   64M   0% /dev
    /dev/root        29G  7.5G   21G  27% /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
    root@genid-volume-secret:/etc/nginx/conf.d# ls -l
    total 0
    lrwxrwxrwx 1 root root 24 Dec 25 01:44 nginx-config.conf -> ..data/nginx-config.conf

     

     

    Secret 데이터 용량 제한


    [참고 영상]

    https://www.youtube.com/watch?v=aW2RAVnOHFY&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=36

     

    'kubernetes' 카테고리의 다른 글

    [따배쿠] 로그 관리  (1) 2025.01.08
    [따배쿠] 인증과 권한 관리 - 권한관리편  (0) 2024.12.29
    [따배쿠] ConfigMap  (0) 2024.12.24
    [따배쿠] Label을 이용한 Canary Deployment  (0) 2024.12.10
    [따배쿠] Annotation  (0) 2024.12.10
Designed by Tistory.