스터디/[쿠버네티스 인 액션] (2024.8)

[쿠버네티스 인 액션] 7장. 컨피그맵과 시크릿 - 컨피그맵, 시크릿 + 참고영상

ttoance 2024. 10. 3. 06:43

 

7.4 컨피그맵으로 설정 분리 

- kubectl create configmap 명령어 사용 

kubectl create configmap fortune-config --from-literal=sleep-interval=25

 

 

kubectl get configmap fortune-config -o yaml



...
apiVersion: v1
data:
  sleep-interval: "25"
kind: ConfigMap
metadata:
  creationTimestamp: "2024-10-01T14:04:20Z"
  name: fortune-config
  namespace: default
  resourceVersion: "1459822"
  uid: 9ebe8eea-8264-44a6-bb7c-9d804670abc9
 ...

 

 

 

- 파일 내용으로 컨피그맵 생성 

kubectl create configmap my-config --from-file=config-file.conf

 

- 디렉터리에 있는 파일로 컨피그맵 생성 

kubectl create configmap my-config --from-file=/path/to/dir

 

▶ 문서에 자세한 내용이 있으니 필요하다면 참고 

https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/

 

Configure a Pod to Use a ConfigMap

Many applications rely on configuration which is used during either application initialization or runtime. Most times, there is a requirement to adjust values assigned to configuration parameters. ConfigMaps are a Kubernetes mechanism that let you inject c

kubernetes.io

 

- configmap과 yaml 연결 

https://github.com/luksa/kubernetes-in-action/blob/master/Chapter07/fortune-pod-env-configmap.yaml

apiVersion: v1
kind: Pod
metadata:
  name: fortune-env-from-configmap
spec:
  containers:
  - image: luksa/fortune:env
    env:
    - name: INTERVAL
      valueFrom: 
        configMapKeyRef:
          name: fortune-config
          key: sleep-interval
    name: html-generator
    volumeMounts:
    - name: html
      mountPath: /var/htdocs
  - image: nginx:alpine
    name: web-server
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
      readOnly: true
    ports:
    - containerPort: 80
      protocol: TCP
  volumes:
  - name: html
    emptyDir: {}

 

valueFrom으로 연결할 수 있다. 

 

 

 

 

- 컨피그맵 생성 

https://github.com/luksa/kubernetes-in-action/tree/master/Chapter07/configmap-files

 

kubernetes-in-action/Chapter07/configmap-files at master · luksa/kubernetes-in-action

Code from the Kubernetes in Action book. Contribute to luksa/kubernetes-in-action development by creating an account on GitHub.

github.com

kubectl create configmap fortune-config --from-file=configmap-files

 

https://github.com/luksa/kubernetes-in-action/blob/master/Chapter07/fortune-pod-configmap-volume.yaml

 

kubernetes-in-action/Chapter07/fortune-pod-configmap-volume.yaml at master · luksa/kubernetes-in-action

Code from the Kubernetes in Action book. Contribute to luksa/kubernetes-in-action development by creating an account on GitHub.

github.com

apiVersion: v1
kind: Pod
metadata:
  name: fortune-configmap-volume
spec:
  containers:
  - image: luksa/fortune:env
    env:
    - name: INTERVAL
      valueFrom:
        configMapKeyRef:
          name: fortune-config
          key: sleep-interval
    name: html-generator
    volumeMounts:
    - name: html
      mountPath: /var/htdocs
  - image: nginx:alpine
    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
        name: http
        protocol: TCP
  volumes:
  - name: html
    emptyDir: {}
  - name: config
    configMap:
      name: fortune-config

 

*volumeMount에 subPath 속성으로 디렉터리 안에 파일을 추가할 수 있음. 

 

 

▶ 주의할 점은, 컨피그맵 변경을 실행하면 모든 인스턴스에 걸쳐 동기적으로 업데이트되지 않기 때문에, 개별 파드의 파일이 최대 1분동안 동기화되지 않은 상태로 있는 것을 알고 있어야 한다. 

 

 

7.5 시크릿으로 민감한 데이터 컨테이너 전달 

- 쿠버네티스는 시크릿에 접근해야 하는 파드가 실행되고 있는 노드에만 개별 시크릿을 배포해 시크릿을 안전하게 유지한다. 

- 노드 자체적으로 시크릿을 항상 메모리에만 저장되게 하고 물리 저장소에 기록되지 않도록 한다. 

> 물리 저장소는 시크릿 삭제한 후에도 디스크를 완전히 삭제하는 작업이 필요하기 때문이다. 

 

- 시크릿 생성 

kubectl create secret generic fortune-https --from-file=https.key

 

- 파드에서 시크릿 사용 

https://github.com/luksa/kubernetes-in-action/blob/master/Chapter07/fortune-pod-https.yaml

 

kubernetes-in-action/Chapter07/fortune-pod-https.yaml at master · luksa/kubernetes-in-action

Code from the Kubernetes in Action book. Contribute to luksa/kubernetes-in-action development by creating an account on GitHub.

github.com

apiVersion: v1
kind: Pod
metadata:
  name: fortune-https
spec:
  containers:
  - image: luksa/fortune:env
    name: html-generator
    env:
    - name: INTERVAL
      valueFrom: 
        configMapKeyRef:
          name: fortune-config
          key: sleep-interval
    volumeMounts:
    - name: html
      mountPath: /var/htdocs
  - image: nginx:alpine
    name: web-server
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
      readOnly: true
    - name: config
      mountPath: /etc/nginx/conf.d
      readOnly: true
    - name: certs
      mountPath: /etc/nginx/certs/
      readOnly: true
    ports:
    - containerPort: 80
    - containerPort: 443
  volumes:
  - name: html
    emptyDir: {}
  - name: config
    configMap:
      name: fortune-config
      items:
      - key: my-nginx-config.conf
        path: https.conf
  - name: certs
    secret:
      secretName: fortune-https

 

 

-쿠버네티스에 자격증명을 전달하는 것이 필요할때 

> 도커 허브에서 프라이빗 이미지 사용 

> 도커 레지스토리 인증을 위한 시크릿 생성 

kubectl create secret docker-registry mydockerhubsecret 
-- docker-username=...

 

 

+ 참고영상

https://www.youtube.com/watch?v=xyGTvkKzrB4

 

반응형