k8s Configmap
특징
-
kubectl describe secret에서는 등록된 내용이 표시되지 않으나, 컨피그맵의 경우 kubectl describe configmap으로 내용이 표시된다.
시크릿과 컨피그맵은 정기적으로 갱신이 체크된다. 볼륨으로 마운트된 경우에도
kubelet의 갱신 주기에 따른 지연이 있기는 하지만 자동으로 갱신된다.
클러스터 롤 view의 대상 리소스에 시크릿은 포함되지 않지만, 컨피그맵은 포함된다. 따라서 참조 권한만으로도 컨피그맵의 내용을 참조할 수 있다.
Nginx의 SSL/TLS 암호 설정 파일: 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: <none>
Annotations: <none>
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: <none>
컨피그맵에 데이터를 등록하는 매니페스트: 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