跨Kubernetes集群添加Loki至Grafana遇400认证失败问题
解决跨Kubernetes集群Loki作为Grafana数据源的认证失败问题
问题场景
- Cluster-01集群已部署Grafana、Loki与Prometheus
- Cluster-02集群通过Helm安装Loki(版本5.0.0),安装命令:
helm repo add grafana https://grafana.github.io/helm-charts helm install loki grafana/loki --version 5.0.0 - 已将Cluster-02中的
loki-gateway服务改为LoadBalancer类型,服务信息:loki-gateway LoadBalancer 10.0.3.61 Some-IP-here http:80►30947 32m - 将Cluster-02的Loki添加为Cluster-01 Grafana数据源时,报错:
Loki: Cannot connect to Loki. 400. Authentication to data source failed
解决方案步骤
1. 检查Loki的认证开关状态
Helm安装的Loki 5.0.0默认开启认证,先确认配置:
kubectl get configmap loki -o yaml -n <你的Loki所在命名空间>
查看data/loki.yaml中的auth_enabled字段:
- 若为
true:需获取对应认证凭证 - 若为
false:排查其他配置问题
2. 获取Loki的Basic Auth凭证
如果Loki开启了Basic Auth,默认会生成包含凭证的Secret:
kubectl get secret loki -o yaml -n <你的Loki所在命名空间>
解码用户名和密码:
# 解码用户名 echo <secret中data.username的值> | base64 -d # 解码密码 echo <secret中data.password的值> | base64 -d
将解码后的用户名和密码填入Grafana数据源的Basic Auth配置项中,开启Basic Auth开关。
3. 排查Loki Gateway的转发配置
确认loki-gateway是否正确转发认证信息到Loki:
kubectl get configmap loki-gateway -o yaml -n <你的Loki所在命名空间>
检查Gateway的NGINX配置(若使用默认的NGINX Gateway),确保没有额外的认证拦截规则,或同步对应规则到Grafana的数据源配置中。
4. 跳过Gateway直接测试Loki服务
为了定位问题点,直接通过端口转发访问Loki核心服务:
kubectl port-forward service/loki-headless 3100:3100 -n <你的Loki所在命名空间>
本地用curl测试认证:
curl -u <解码后的用户名>:<解码后的密码> http://localhost:3100/loki/api/v1/labels
- 若返回正常标签数据:说明Loki核心服务认证正常,问题出在Gateway配置或Grafana地址填写
- 若仍报错:检查Loki的认证配置是否正确,或重启Loki Pods
5. 临时关闭认证验证(仅用于测试)
若需快速验证是否为认证问题,可临时关闭Loki的认证:
kubectl edit configmap loki -n <你的Loki所在命名空间>
修改auth_enabled为false,保存后重启Loki StatefulSet:
kubectl rollout restart statefulset loki -n <你的Loki所在命名空间>
重新在Grafana中添加数据源,若能成功连接,则说明之前的认证凭证配置有误。
内容的提问来源于stack exchange,提问作者Container-Man
相关产品推荐
相关产品推荐

