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 헬름 차트에서 비밀번호 설정이 잘 동작하지 않는 경우 해결방법
Audience
- Grafana 헬름 차트 비밀번호 변경했는데도 안되는 경우
- Grafana의 admin의 기본 비밀번호를 바꾸고 싶은 경우
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가 있는 경우 구성 정보를 잘 확인하자