K8s Secret?

  • 시크릿은 비밀번호, OAuth 토큰, SSH 키 같은 민감한 정보들을 저장하는 용도로 사용
  • 구성정보를 base64로 인코딩해서 한곳에서 관리
    • 인코딩된 정보가 pod로 전달되면 해당 정보는 디코딩 된 형태로 보임
  • secret의 최대 크기는 1MB
  • Secret는 etcd에 암호화 하지 않은 텍스트 형태로 저장됨
kubectl create secret <Available Commands> name
                        docker-registry
                        generic
                        tls
                        
 ex)
 kubectl create secret tls my-secret --cert=path/to/certi/file --key=path/to/key/file
 
 kubectl creaate secret docker-registry reg-secret --docker-username=xxx \
   --docker-password=pass --docker-email=xxx@gmail.com
   
kubectl creaate secret genetic generic-secret \
--from-literal=INTERVAL=2 --from-file=/config/

 

 

K8s Secret 생성 테스트

apiVersion: v1
kind: Pod
metadata:
  name: genid-env-secret
spec:
  containers:
  - image: ubuntu
    command: ["bash"]
    args:
    - "-c"
    - sleep 100000
    env:
    - name: INTERVAL
      valueFrom:
        secretKeyRef:
          name: test-secret
          key: INTERVAL
    name: 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 secret generic test-secret --from-literal=INTERVAL=2 --from-file=./genid-web-config/

 

 

K8s Secret 볼륨마운트 테스트

apiVersion: v1
kind: Pod
metadata:
  name: genid-env-secret
spec:
  containers:
  - image: ubuntu
    command: ["bash"]
    args:
    - "-c"
    - sleep 100000
    env:
    - name: INTERVAL
      valueFrom:
        secretKeyRef:
          name: test-secret
          key: INTERVAL
    name: generator
    volumeMounts:
    - name: html
      mountPath: /webdata
    - name: config
      mountPath: /etc/nginx/conf.d
  - image: nginx:1.14
    name: web-server
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
      readOnly: true
    ports:
    - containerPort: 80
  volumes:
  - name: html
    emptyDir: {}
  - name: config
    secret:
      secretName: test-secret
      items:
      - key: nginx-config.conf
        path: nginx-config

 

'클라우드 > K8s' 카테고리의 다른 글

K8s 인증과 권한관리  (0) 2022.04.03
Pod 스케줄링  (0) 2022.04.03
K8s Configmap  (0) 2022.03.31
K8s 버전 업그레이드  (0) 2022.03.18
K8s 애플리케이션 변수관리  (0) 2022.03.17

애플리케이션에서 환경변수를 설정하는 방법은 3가지가 있다.

 

1. 환경변수를 pod에 저장하는 방법(kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/)

 

apiVersion: v1
kind: Pod
metadata:
  name: envar-demo
  labels:
    purpose: demonstrate-envars
spec:
  containers:
  - name: envar-demo-container
    image: gcr.io/google-samples/node-hello:1.0
    env:
    - name: DEMO_GREETING
      value: "Hello from the environment"
    - name: DEMO_FAREWELL
      value: "Such a sweet sorrow"

envars.yaml

 

 

 

2. Configmap환경변수를 ConfigMap 에 저장하는 방법

 

configmap 생성 및 조회

  • # kubectl create configmap map-name --from-file=test
  • # kubectl get configmaps -o yaml

 

apiVersion: v1
kind: Pod
metadata:
  name: envar-configmap
  labels:
    purpose: demonstrate-envars
spec:
  containers:
  - name: envar-demo-container
    image: gcr.io/google-samples/node-hello:1.0
    env:
    - name: DEMO_GREETING
      valueFrom:
        configMapKeyRef:
          name: map-name
          key: test

envars-configmap.yaml

 

configmap을 통한 환경번수 설정

 

전체 keylist를 환경변수에 설정

 

configmap을 활용한 디렉토리 마운트

/etc/config에 파일형태로 환경변수 저장

  • configmap에 3개의 key-value pairs를 추가할 경우 pod내에서도 이 설정이 1분마다 refresh되어 반영됨을 확인 할 수 있다.
    • key-value pairs의 삭제 또한 반영된다.
  • 마운트형태가 아닌 일반 configmap방식은 pod가 restart되어야 configmap의 변경사항이 반영된다.

 

3. 환경변수를 Secret에 저장하는 방법

  • bese64 인코딩된 형태로 데이터를 저장한다.
    • 비밀번호, OAuth 토큰 및 ssh 키등

secret 생성

  • # echo -n admin > username
  • # echo -n 242q3afsa2 > password
  • # kubectl create secret generic db-user-pass --from-file=u sername --from-file=password
  • # kubectl get secrets db-user-pass -o yaml
  • 디코딩
    • # echo YWRtaW4= | base64 --decode

secret를 환경변수로 pod생성

 

 

  • kubectl create secret generic db-secret --from-literal=' DB_Password=Passw0rd!0' --dry-run=client  -o yaml > secret-mysql.yaml
  • kubectl get secret db-secret -o yaml

'클라우드 > K8s' 카테고리의 다른 글

K8s Configmap  (0) 2022.03.31
K8s 버전 업그레이드  (0) 2022.03.18
K8s Self-healing  (0) 2022.03.17
K8s label  (0) 2022.03.17
K8s Network  (0) 2022.03.17

+ Recent posts