# k8s Configmap ## 특징 - 컨피그맵을 등록할 때는 [[k8s_secret|시크릿]]처럼 값을 [[Base64]]로 인코드하지 않아도 된다. - `kubectl describe secret`에서는 등록된 내용이 표시되지 않으나, 컨피그맵의 경우 `kubectl describe configmap`으로 내용이 표시된다. - 시크릿과 컨피그맵은 정기적으로 갱신이 체크된다. 볼륨으로 마운트된 경우에도 [[kubelet]]의 갱신 주기에 따른 지연이 있기는 하지만 자동으로 갱신된다. - 클러스터 롤 view의 대상 리소스에 시크릿은 포함되지 않지만, 컨피그맵은 포함된다. 따라서 참조 권한만으로도 컨피그맵의 내용을 참조할 수 있다. ### Nginx의 SSL/TLS 암호 설정 파일: tls.conf - [[Nginx tls.conf]] ### nginx-conf 디렉터리의 설정 파일을 일괄로 컨피그맵에 등록 $ kubectl create configmap nginx-conf --from-file=tls.conf $ kubectl get configmap nginx-conf $ kubectl describe configmap nginx-conf Name: nginx-conf Namespace: default Labels: Annotations: Data ==== tls.conf: ---- ssl_protocols TLSv1 TLSv1.1 TLSv1.2; server { listen 443 ssl; server_name www.sample.com; ssl_certificate /etc/cert/tls.crt; ssl_certificate_key /etc/cert/tls.key; location / { root /usr/share/nginx/html; index index.html index.htm; } } BinaryData ==== Events: ### 컨피그맵에 데이터를 등록하는 매니페스트: cm-env.yml apiVersion: v1 kind: ConfigMap metadata: name: env-config data: log_level: INFO ### 컨피그맵을 환경 변수로 읽는 파드의 매니페스트: cm-env-read.yml apiVersion: v1 kind: Pod metadata: name: web-apl spec: containers: - name: web image: nginx env: - name: LOG_LEVEL ## 컨테이너 환경 변수명 valueFrom: configMapKeyRef: name: env-config ## 컨피그맵명 key: log_level ## 키 항목 ### 파드에서 컨피그맵의 값을 환경 변수로 읽기 $ kubectl apply -f cm-env.yml $ kubectl apply -f cm-env-read.yml $ kubectl exec -it web-apl env kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=web-apl TERM=xterm LOG_LEVEL=INFO KUBERNETES_SERVICE_PORT=443 KUBERNETES_SERVICE_PORT_HTTPS=443 KUBERNETES_PORT=tcp://10.96.0.1:443 KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443 KUBERNETES_PORT_443_TCP_PROTO=tcp KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1 KUBERNETES_SERVICE_HOST=10.96.0.1 NGINX_VERSION=1.21.3 NJS_VERSION=0.6.2 PKG_RELEASE=1~buster HOME=/root