110.10 f

Description: Let's address the issue of passwords not working during Grafana deployment via Helm, and not resolving even after resetting. This content focuses on understanding the secret resource that manages accounts and the deployment to solve problems that are difficult to diagnose from outside the pod.

#100#Infra#110#DevOps_Engineer_Infra#110.10#Kubernetes#110.10 f#What_to_do_if_password_settings_don't_work_well_in_Grafana_helm_charts

Grafana 헬름 차트에서 비밀번호 설정이 잘 동작하지 않는 경우 해결방법

#Kubernetes #Helm #Grafana

Audience

Overview

현상은 helm으로 grafana배포후 admin 비밀번호를 변경하는데 잘 작동을 안하게 된 케이스.
원인 분석결과 deployment의 env가 덮어쓰는 방식.
사용하는 헬름패키지의 경우 내가 모르는 부분을 파악.
해당 deployment는 secret를 참조하기 때문에, secret 변경후 deployment rollout을 통해 변경된 비밀번호 적용.

Content

UI 테스트 후 혹시나 하는 마음에 CLI로 시도 후 성공 메시지까지 확인

kubectl exec -it pod/<grafana pod name> -n monitoring -c grafana -- grafana-cli admin reset-admin-password <MY PASSWORD>

INFO[05-13|05:43:20] Connecting to DB                         logger=sqlstore dbtype=sqlite3
INFO[05-13|05:43:20] Starting DB migrations                   logger=migrator
INFO[05-13|05:43:20] migrations completed                     logger=migrator performed=0 skipped=279 duration=657.661µs

Admin password changed successfully ✔

다음 명령어를 통해 admin의 현재 password확인

kubectl exec pod/loki-grafana-12345676aws-wc29r -n monitoring -c grafana -- env

PATH=/usr/share/grafana/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=loki-grafana-12345676aws-wc29r
....
GF_SECURITY_ADMIN_USER=admin
GF_SECURITY_ADMIN_PASSWORD=fmnioejiofef094392222
...

직접적인 원인은 컨테이너에 하드코딩된 변수로 admin password를 인식, 해당 원인은 deployment에 의한 재할당으로 파악

edit을 통해 deployment 내용 확인. admin-password의 경우 secret를 통해 반영중

kubectl edit deployment.apps/loki-grafana -n monitoring

 82       - env:
 83         - name: GF_SECURITY_ADMIN_USER
 84           valueFrom:
 85             secretKeyRef:
 86               key: admin-user
 87               name: loki-grafana
 88         - name: GF_SECURITY_ADMIN_PASSWORD
 89           valueFrom:
 90             secretKeyRef:
 91               key: admin-password
 92               name: loki-grafana

secret를 변경하기 먼저 현재 비밀번호 파악

$ kubectl get secret loki-grafana -n monitoring -o jsonpath="{.data}" | jq -r 'keys[] as $k | "\($k): \(.[$k] | @base64d)"'

admin-password: <some_password>
admin-user: admin
ldap-toml:

base64 비밀번호 생성

echo -n passwordtest | base64
cGFzc3dvcmR0ZXN0

기존 secret값을 변경. secret을 만들 권한이 없거나, 또는 기존의 구조에 어떤 커스텀이 들어간지 모르기에 기존 secret에서 내용만 변경

kubectl patch secret loki-grafana -n monitoring --type='json' -p='[{"op": "replace", "path": "/data/admin-password", "value": "cGFzc3dvcmR0ZXN0"}]'

기존 pod에서는 적용이 안 돼있으니 rollout을 통해 해당 env가 적용된 컨테이너를 배포하는 파드를 다시 생성하도록 명령

kubectl rollout restart deployment <grafana-deployment-name> -n monitoring

Conclusion

명령어가 성공하더라돟 helm, deployment등에의해 덮어 씌워질 수 있다
그러니 환경변수 등 외부요인도 고려하여 찾아보자
특히 계정정보의 경우 secret과 deployment가 있는 경우 구성 정보를 잘 확인하자