无法使用来自浏览器的入口访问我在 k8s 集群上的 grafana 仪表板
Posted
技术标签:
【中文标题】无法使用来自浏览器的入口访问我在 k8s 集群上的 grafana 仪表板【英文标题】:can't reach to my grafana dashboard on k8s cluster using ingress from browser 【发布时间】:2021-11-13 00:02:35 【问题描述】:我已经使用helm
在我的Kubernetes
集群上安装了Prometheus
和Grafana
:
$helm install prometheus prometheus-community/kube-prometheus-stack
所有pods
、deployments
和services
都已启动并运行。当我像这样使用端口转发时:
kubectl port-forward deployment/prometheus-grafana 3000
我可以使用浏览器访问我的grafana dashboard
,但是当我想使用ingress
而不是port-forward
时,响应是:
我无法访问 Grafana 仪表板。
我的ingress
yaml 文件:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: grafana-ingress
namespace: default
spec:
ingressClassName: kong
rules:
- http:
paths:
- path: /grafana/login
pathType: Prefix
backend:
service:
name: prometheus-grafana
port:
number: 80
prometheus-grafana
服务 yaml 文件是:
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
annotations:
meta.helm.sh/release-name: prometheus
meta.helm.sh/release-namespace: default
creationTimestamp: "2021-09-15T11:07:30Z"
labels:
app.kubernetes.io/instance: prometheus
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: grafana
app.kubernetes.io/version: 8.1.2
helm.sh/chart: grafana-6.16.4
name: prometheus-grafana
namespace: default
resourceVersion: "801373"
uid: e1f57de9-94d0-460a-a427-4a97fd770e12
spec:
clusterIP: 10.100.90.147
clusterIPs:
- 10.100.90.147
ports:
- name: service
port: 80
protocol: TCP
targetPort: 3000
selector:
app.kubernetes.io/instance: prometheus
app.kubernetes.io/name: grafana
sessionAffinity: None
type: ClusterIP
status:
loadBalancer:
【问题讨论】:
Ingress 中的路径 /grafana/login 对我来说有点奇怪。您不应该公开整个 /grafana 路径吗?也许登录页面试图将您重定向到另一个页面但不能,因为没有通往它的路线? 嗨@AndD!整个路径是什么意思?有点像 www.example.com/grafana/login ? 我的意思是,Ingress 只定义了一条路径,/grafana/login
,类型为Prefix
。 Grafana 肯定会有除/grafana/login
之外的其他路径,所以我首先尝试使用一条路径,/grafana
。使用端口转发时,在哪个路径可以打开 grafana 仪表盘?因为 Grafana 可能会期望请求到达相同的路径。
当我使用端口转发时,我可以在 localhost:3000
看到 grafana 仪表板
好的,这就解释了事情。 Grafana 是一个 Web 应用程序,希望直接在服务器的根路径下提供服务。您需要在/
下将其公开为路径,使用重写目标规则或在主机的子域下提供它。尝试使用路径/
是否一切都按预期工作。
【参考方案1】:
我已发布社区 wiki 答案以获得更好的可见性。问题已解决,与入口yaml文件有关。
解决方案:
我更改了我的入口文件:添加了
host: grafana.example.com
并将path
更改为/
。一切顺利。
解决方案的建议:
我的意思是,Ingress 只定义了一个路径,
/grafana/login
,类型为Prefix
。 Grafana 肯定会有除/grafana/login
之外的其他路径,所以我首先要尝试的是只使用一条路径,/grafana
。使用端口转发时,在哪个路径可以打开 grafana 仪表盘?因为 Grafana 可能会期望请求到达相同的路径。
解释:
Grafana 是一个网络应用程序,它期望直接在服务器的根路径下提供服务。您需要在
/
下将其公开为路径,使用重写目标规则或在主机的子域下提供它。尝试使用路径/
是否一切都按预期工作,或者不是第一件事
【讨论】:
你好@hesmoh。如果可以解决您的问题,请考虑 accepting the answer。以上是关于无法使用来自浏览器的入口访问我在 k8s 集群上的 grafana 仪表板的主要内容,如果未能解决你的问题,请参考以下文章
我在两个EC-2实例和仪表板上设置了Kubernetes集群但是我无法在浏览器上访问kubernetes仪表板的ui